Hur skriver jag ut resultat från en metod för binär sökning (nybörjare) C#

Permalänk

Hur skriver jag ut resultat från en metod för binär sökning (nybörjare) C#

Jag läser programmering 1 i gymnasienivå.

Har fått ett antal olika uppgifter att genomföra och har fastnat i att presentera resultatet av en binär sökning av en lista med städer och temperaturer.
Problemet är att vid initiering av metoden så blir resultatet alltid ( -1 ). Trots korrekt input.
Här är en länk till en pastebin där man kan se hela koden: https://pastebin.com/dm3Xf0Kr

Nedan är metod för binär sökning som söker efter temperatur i ett stadsfält:

static int binärSökning(List<Stad> SorteradLista, int bSök, int n) { int låg = 0; int hög = SorteradLista.Count - 1; while (låg <= hög) { int mitten = (låg + hög) / 2; if (bSök == SorteradLista[mitten].temp) { return mitten; } else if (SorteradLista[n].temp == 1) { return -1; } else if (bSök < SorteradLista[mitten].temp) { hög = mitten - 1; } else { låg = mitten + 1; } } return -1; }

Här är koden för att testa så att metoden fungerar (vilket den inte gör):

case 4: Console.Write("\nAnge värde du söker: "); int bSök = Convert.ToInt32(Console.ReadLine()); int resultat = binärSökning(SorteradLista, bSök, n); if (resultat == -1) { Console.WriteLine("Sökta värdet finns inte i listan."); } else { Console.WriteLine("Värdet för den sökta temperaturen är: " + resultat); } break;

Permalänk
Avstängd

Använd debuggern och titta på värdena i varje steg, ser de ut som du förväntar dig? Om inte, varför? Det är svårt att säga mer utan att veta mer, vad är n exempelvis? Frågar du om den någonstans, ändras den någonstans?

Permalänk
Medlem

Din binärsökningskod är bra eftersom den är relativt testbar. Den har ju däremot som du själv förstått buggar.

Skriv lite kod som 1) Sätter upp väldefinierad testdata (en sorterad lista), 2) anropar sökningen och 3) jämför utdata med förväntad utdata.

Dokumentera det förväntade beteendet av din metod. Vad ska din metod returnera, en temperatur eller ett index där funnen stad finns?

Börja med det lättaste fallet, en tom lista. Sedan en lista med ett element, en lista med två element där det sökta värdet ligger först, en lista med två element där det sökta värdet ligger sist osv. Fortsätt tills du minst klarar sökning på alla positioner i en lista med fem element. Vad händer om två städer har samma temperatur?

I din situation är poängen med att skriva särskild testkod att du inte behöver mata in temperaturen i varje körning. Du kan dessutom snabbt återupprepa de gamla testerna efter att ha gjort ändringar så att du kan se att du inte sabbade något som tidigare fungerade.

Du behöver ett bra sätt att debugga. Din kurslitteratur innehåller säkerligen ett kapitel om hur du använder debuggern i ditt utvecklingsverktyg, antsgligen Visual Studio. Annars finns det garanterat videor och dokumentation på nätet. Sökfras ”use debugger in Visual Studio”.

Fulvarianten är att skriva ut värdet av varje variabel efter att en ny tilldelning gjorts och tolka resultatet. Vilket värde förväntar du dig att variabeln ska ha? Vilket värde har den?

Lycka till!

Permalänk

Nu har jag inte tid att testa koden och är inte van vid just c# men har två frågor som kanske kan leda dig på rätt väg:

1. Rad 135 (från din pastebinlänk)
Jag tolkar det statementet som "om temperaturen i den sista staden är 1, returnera -1", vilket jag inte riktigt förstår meningen med.

2. Rad 7
Det ser ut som att du initierar n till antal städer i listan men inte uppdaterar antalet när du lägger till städer, vilket gör att n då alltid är noll (om inte jag missar nåt).

3. Rad 8
Du deklarerar en lista och sorterar den innan du lägger till städer, men som du kanske vet så behöver vi ha en sorterad lista för att kunna göra en binär sökning.

Jag kanske missar några finesser med c# eller andra detaljer. Rätta mig gärna isåfall