Console.WriteLine upprepar sig för alltid
Här är min kod:
case 3: // Här ska användaren kunna söka bland siffrorna med en binärsökning.
Console.Clear();
if (sifferLista.Count > 0)
{
if (intSortering)
{
Console.WriteLine("\n\tVilken siffra vill du söka på?");
Int32.TryParse(Console.ReadLine(), out int key); // Tar emot användarens sökning
if (key < 0) key = 0; // Ser till att sökningen är på ett positivt tal
int första = 0;
int sista = sifferLista.Count - 1;
while (första <= sista)
{
int mellan = (första + sista) / 2;
if (key > sifferLista[mellan])
första = mellan + 1;
else if (key < sifferLista[mellan])
sista = mellan - 1;
else
Console.WriteLine("\n\tSiffran du sökt på finns på element {0} i sifferlistan.", mellan);
}
if (första > sista)
Console.WriteLine("\n\tSökningen lyckades inte");
SifferUtskrift(sifferLista); // Skriver ut hela listan med metoden.
}
else
{
Console.WriteLine("\n\tSiffrorna i din lista behöver sorteras. Kör en sortering innan sökningen."); // Användaren behöver göra en sortering.
}
}
else
{
Console.WriteLine("\n\tDet saknas inlägg i sifferlistan. Generera lite siffror först."); // Användaren har inte genererat något värde till listan.
}
MenyAvslut(); // Kallar på den standardiserade menyavslutning metoden.
break;
Osäkert om resterande koden är viktigt att se men jag visar alla kod som finns i caset för lite kontext.
På rad nr. 23 så får jag i i konsol-fönstret att texten upprepar sig om och om och om igen för evighet. Jag har testat att skrivit in Console.ReadLine under den raden och problemet blev löst men då skulle användaren behöver trycka en ytterligare "Enter" för att få fram texten och den vägen vill jag inte ta hellre.
Vad kan jag göra för att det ska endast visas en rad med text?
Förmodligen har 'första' blivit lika med 'sista' och då fortsätter loopen. Du kan skriva in ett "break" efter utskriften så går du ur loopen. Det kan vara rätt att ha (första < sista)
som test, men jag har inte tänkt ut om det kan bli fel.
Laguna skrev:Förmodligen har 'första' blivit lika med 'sista' och då fortsätter loopen. Du kan skriva in ett "break" efter utskriften så går du ur loopen. Det kan vara rätt att ha
(första < sista)
som test, men jag har inte tänkt ut om det kan bli fel.
(första < sista) kunde inte söka fram något resultat. "break" testade jag med istället och då fungerade det utmärkt!
Men sen så har jag ett litet problem till, nästan samma kod med en binärsökning dock bland bokstäverna istället går det nämligen inte att använda break; på samma sätt och får samma resultat. Lägger jag in break; i slutet av while-loopen där så visar det inte resultat-texten alls..
Koden på det ser ut såhär:
Utan break;:
Med break;:
Något tips på vad jag skulle kunna testa med? Och tack ska du ha! ^^
Tänkte du på att ha klamrar runt utskriften och break? break ska bara göras i det sista fallet i testningen.
Lägger man bara till det rakt av så utförs det redan första gången man har kört igenom loopen.
(Jag tror pluggakuten vill att man har allt material här och inte länkar till andra servrar, för att det senare kan försvinna, antar jag.)
viie skrev:Här är min kod:
case 3: // Här ska användaren kunna söka bland siffrorna med en binärsökning. Console.Clear(); if (sifferLista.Count > 0) { if (intSortering) { Console.WriteLine("\n\tVilken siffra vill du söka på?"); Int32.TryParse(Console.ReadLine(), out int key); // Tar emot användarens sökning if (key < 0) key = 0; // Ser till att sökningen är på ett positivt tal int första = 0; int sista = sifferLista.Count - 1; while (första <= sista) { int mellan = (första + sista) / 2; if (key > sifferLista[mellan]) första = mellan + 1; else if (key < sifferLista[mellan]) sista = mellan - 1; else Console.WriteLine("\n\tSiffran du sökt på finns på element {0} i sifferlistan.", mellan); break; } if (första > sista) Console.WriteLine("\n\tSökningen lyckades inte"); SifferUtskrift(sifferLista); // Skriver ut hela listan med metoden. } else { Console.WriteLine("\n\tSiffrorna i din lista behöver sorteras. Kör en sortering innan sökningen."); // Användaren behöver göra en sortering. } } else { Console.WriteLine("\n\tDet saknas inlägg i sifferlistan. Generera lite siffror först."); // Användaren har inte genererat något värde till listan. } MenyAvslut(); // Kallar på den standardiserade menyavslutning metoden. break;
Osäkert om resterande koden är viktigt att se men jag visar alla kod som finns i caset för lite kontext.
På rad nr. 23 så får jag i i konsol-fönstret att texten upprepar sig om och om och om igen för evighet. Jag har testat att skrivit in Console.ReadLine under den raden och problemet blev löst men då skulle användaren behöver trycka en ytterligare "Enter" för att få fram texten och den vägen vill jag inte ta hellre.
Vad kan jag göra för att det ska endast visas en rad med text?
Inte läst igenom koden så noga, men funkar inte det här? La in break i koden ovan.
Beerger, läste du min kommentar? Du har gjort precis det fel som jag beskrev.