Min kod hoppar över min else-if sats

Permalänk
Medlem

Min kod hoppar över min else-if sats

Kan någon peta mig i rätt riktning vad jag gör för fel här? Jag gör min sista uppgift i programmering1 c# och detta är det sista jag behöver få bukt med. Jag har gjort en buss simulator där man skall kunna "peta" på passagerarna. Men av någon anledning hoppar koden över mina cases i mina else-if satser när jag gör mitt val om vem man skall peta på. Jätte tacksam för hjälp!

public void poke()//Metod för att peta på passagerare { Console.Clear(); Console.WriteLine("*****Peta på passagerarna!*****"); int platsNr = 0; int index = -1; foreach (Passagerare person in plats)//Här skriver jag ut bussen för att man skall få se vart eller vem man vill peta på { platsNr++; if (person == null) { Console.WriteLine("Plats {0} är tom", platsNr); } else { Console.WriteLine("Plats {0}: {1}, {2} år gammal, {3}.", platsNr, person.Namn, person.Ålder, person.VilketKön()); } } Console.WriteLine("Välj vilken plats du vill peta på passageraren: "); while (true)//Här kontrollerar jag att man har valt en plats där det sitter någon, eller att platsen ens existerar i vektorn { try { index = Convert.ToInt32(Console.ReadLine()) -1; if (index < 0 || index >= plats.Length) { Console.WriteLine("Var vänlig och välj en plats mellan 1 och {0}",plats.Length); } else if (plats[index] == null) { Console.WriteLine("Den platsen är tom, var vänlig och välj en annan plats: "); } else { break; } } catch (FormatException) { Console.WriteLine("Var vänlig och ange endast heltal"); } catch (Exception E) { Console.WriteLine(E.Message); } } if (plats[index].Ålder >= vuxengräns)//Petar man på någon som är vuxen kommer något av dessa alternativen att skrivas ut { switch (plats[index].Kön) { case "K": Console.WriteLine("{0} Vad håller du på med???", plats[index].Namn); break; case "M": Console.WriteLine("{0} Rör mig inte!!", plats[index].Namn); break; case "A": Console.WriteLine("{0} Kan du hålla dina fingrar för dig själv, tack!", plats[index].Namn); break; } } else if (plats[index].Ålder < vuxengräns && plats[index].Ålder > barngräns)//Petar man på någon som är i tonåren så skrivs detta ut { switch (plats[index].Kön) { case "K": Console.WriteLine("{0} Kan du vara så snäll att byta plats?", plats[index].Namn); break; case "M": Console.WriteLine("{0} Varför gjorde du sådär för?", plats[index].Namn); break; case "A": Console.WriteLine("{0} Det är faktiskt en pandemi, så var snäll och gör inte om det där.", plats[index].Namn); break; } } else if (plats[index].Ålder <= barngräns)//Petar man på ett barn kommer detta att skrivas ut { switch (plats[index].Kön) { case "K": Console.WriteLine("{0} Känner jag dig?", plats[index].Namn); break; case "M": Console.WriteLine("{0} Tittar upp argt och petar tillbaka.", plats[index].Namn); break; case "A": Console.WriteLine("{0} Jag skriker om du gör om det där.", plats[index].Namn); break; } } Console.WriteLine("============\n"+ "Tryck på valfri tangent för att fortsätta"); Console.ReadKey(true); }

Permalänk
Medlem

Formateringen får mina ögon att blöda :')

Permalänk
Medlem
Skrivet av Ruban31:

Kan någon peta mig i rätt riktning vad jag gör för fel här? Jag gör min sista uppgift i programmering1 c# och detta är det sista jag behöver få bukt med. Jag har gjort en buss simulator där man skall kunna "peta" på passagerarna. Men av någon anledning hoppar koden över mina cases i mina else-if satser när jag gör mitt val om vem man skall peta på. Jätte tacksam för hjälp!

public void poke()//Metod för att peta på passagerare
{
Console.Clear();
Console.WriteLine("*****Peta på passagerarna!*****");
int platsNr = 0;
int index = -1;
foreach (Passagerare person in plats)//Här skriver jag ut bussen för att man skall få se vart eller vem man vill peta på
{
platsNr++;
if (person == null)
{
Console.WriteLine("Plats {0} är tom", platsNr);
}
else
{
Console.WriteLine("Plats {0}: {1}, {2} år gammal, {3}.", platsNr, person.Namn, person.Ålder, person.VilketKön());
}
}
Console.WriteLine("Välj vilken plats du vill peta på passageraren: ");

while (true)//Här kontrollerar jag att man har valt en plats där det sitter någon, eller att platsen ens existerar i vektorn
{
try
{
index = Convert.ToInt32(Console.ReadLine()) -1;
if (index < 0 || index >= plats.Length)
{
Console.WriteLine("Var vänlig och välj en plats mellan 1 och {0}",plats.Length);
}
else if (plats[index] == null)
{
Console.WriteLine("Den platsen är tom, var vänlig och välj en annan plats: ");
}
else
{
break;
}
}
catch (FormatException)
{
Console.WriteLine("Var vänlig och ange endast heltal");
}
catch (Exception E)
{
Console.WriteLine(E.Message);
}
}

if (plats[index].Ålder >= vuxengräns)//Petar man på någon som är vuxen kommer något av dessa alternativen att skrivas ut
{
switch (plats[index].Kön)
{
case "K":
Console.WriteLine("{0} Vad håller du på med???", plats[index].Namn);
break;
case "M":
Console.WriteLine("{0} Rör mig inte!!", plats[index].Namn);
break;
case "A":
Console.WriteLine("{0} Kan du hålla dina fingrar för dig själv, tack!", plats[index].Namn);
break;
}
}
else if (plats[index].Ålder < vuxengräns && plats[index].Ålder > barngräns)//Petar man på någon som är i tonåren så skrivs detta ut
{
switch (plats[index].Kön)
{
case "K":
Console.WriteLine("{0} Kan du vara så snäll att byta plats?", plats[index].Namn);
break;
case "M":
Console.WriteLine("{0} Varför gjorde du sådär för?", plats[index].Namn);
break;
case "A":
Console.WriteLine("{0} Det är faktiskt en pandemi, så var snäll och gör inte om det där.", plats[index].Namn);
break;
}
}
else if (plats[index].Ålder <= barngräns)//Petar man på ett barn kommer detta att skrivas ut
{
switch (plats[index].Kön)
{
case "K":
Console.WriteLine("{0} Känner jag dig?", plats[index].Namn);
break;
case "M":
Console.WriteLine("{0} Tittar upp argt och petar tillbaka.", plats[index].Namn);
break;
case "A":
Console.WriteLine("{0} Jag skriker om du gör om det där.", plats[index].Namn);
break;
}
}
Console.WriteLine("============\n"+
"Tryck på valfri tangent för att fortsätta");
Console.ReadKey(true);
}

Redigera ditt inlägg och:

1. Se till att formatteringen är vettig (dvs. ingen onödig indentering).
2. Använd [code]-taggar så att din kod blir enklare att läsa.

Visa signatur

:(){ :|:& };:

🏊🏻‍♂️   🚴🏻‍♂️   🏃🏻‍♂️   ☕

Permalänk
Medlem

Sätt en breakpoint och kolla vad värdet är där du tycker det är fel. Ska du pasta kod gör det inom code taggar, otroligt svårt att läsa som det är nu.

Permalänk
Medlem

Lägg upp hela koden så kan jag kolla senare ikväll

Permalänk
Medlem
Skrivet av SexMachine:

Lägg upp hela koden så kan jag kolla senare ikväll

Det är 700 rader kod sammanlagt, men det är bara min if sats i denna metoden som strular. Behöver jag verkligen lägga upp resten då?:)

Permalänk
Medlem
Skrivet av Ruban31:

Det är 700 rader kod sammanlagt, men det är bara min if sats i denna metoden som strular. Behöver jag verkligen lägga upp resten då?:)

Ja då kan jag klippa in programmet i visual studio och köra det där. Är det i en fil? Min poke så ut såhär.

/// <summary> /// poke metod som ger olika resultat beroende på kön och ålder /// </summary> public void poke() { if (sex.Substring(0, 1) == "M" && age > 50) { Console.WriteLine("Sätt dig ner i bussen!"); }else if (sex.Substring(0, 1) == "M" && age < 50) { Console.WriteLine("SMACK!!"); } else if (sex.Substring(0, 1) == "K" && age > 50) { Console.WriteLine("Sluta!"); } else if (sex.Substring(0, 1) == "K" && age < 50) { Console.WriteLine("TiHi"); } }

Permalänk
Medlem
Skrivet av Ruban31:

Kan någon peta mig i rätt riktning vad jag gör för fel här? Jag gör min sista uppgift i programmering1 c# och detta är det sista jag behöver få bukt med. Jag har gjort en buss simulator där man skall kunna "peta" på passagerarna. Men av någon anledning hoppar koden över mina cases i mina else-if satser när jag gör mitt val om vem man skall peta på. Jätte tacksam för hjälp!

public void poke()//Metod för att peta på passagerare { Console.Clear(); Console.WriteLine("*****Peta på passagerarna!*****"); int platsNr = 0; int index = -1; foreach (Passagerare person in plats)//Här skriver jag ut bussen för att man skall få se vart eller vem man vill peta på { platsNr++; if (person == null) { Console.WriteLine("Plats {0} är tom", platsNr); } else { Console.WriteLine("Plats {0}: {1}, {2} år gammal, {3}.", platsNr, person.Namn, person.Ålder, person.VilketKön()); } } Console.WriteLine("Välj vilken plats du vill peta på passageraren: "); while (true)//Här kontrollerar jag att man har valt en plats där det sitter någon, eller att platsen ens existerar i vektorn { try { index = Convert.ToInt32(Console.ReadLine()) -1; if (index < 0 || index >= plats.Length) { Console.WriteLine("Var vänlig och välj en plats mellan 1 och {0}",plats.Length); } else if (plats[index] == null) { Console.WriteLine("Den platsen är tom, var vänlig och välj en annan plats: "); } else { break; } } catch (FormatException) { Console.WriteLine("Var vänlig och ange endast heltal"); } catch (Exception E) { Console.WriteLine(E.Message); } } if (plats[index].Ålder >= vuxengräns)//Petar man på någon som är vuxen kommer något av dessa alternativen att skrivas ut { switch (plats[index].Kön) { case "K": Console.WriteLine("{0} Vad håller du på med???", plats[index].Namn); break; case "M": Console.WriteLine("{0} Rör mig inte!!", plats[index].Namn); break; case "A": Console.WriteLine("{0} Kan du hålla dina fingrar för dig själv, tack!", plats[index].Namn); break; } } else if (plats[index].Ålder < vuxengräns && plats[index].Ålder > barngräns)//Petar man på någon som är i tonåren så skrivs detta ut { switch (plats[index].Kön) { case "K": Console.WriteLine("{0} Kan du vara så snäll att byta plats?", plats[index].Namn); break; case "M": Console.WriteLine("{0} Varför gjorde du sådär för?", plats[index].Namn); break; case "A": Console.WriteLine("{0} Det är faktiskt en pandemi, så var snäll och gör inte om det där.", plats[index].Namn); break; } } else if (plats[index].Ålder <= barngräns)//Petar man på ett barn kommer detta att skrivas ut { switch (plats[index].Kön) { case "K": Console.WriteLine("{0} Känner jag dig?", plats[index].Namn); break; case "M": Console.WriteLine("{0} Tittar upp argt och petar tillbaka.", plats[index].Namn); break; case "A": Console.WriteLine("{0} Jag skriker om du gör om det där.", plats[index].Namn); break; } } Console.WriteLine("============\n"+ "Tryck på valfri tangent för att fortsätta"); Console.ReadKey(true); }

Skrivet av Kasidro:

Sätt en breakpoint och kolla vad värdet är där du tycker det är fel. Ska du pasta kod gör det inom code taggar, otroligt svårt att läsa som det är nu.

Ja, att lära sig att använda debuggern så snart som möjligt är verkligen ett viktigt steg för att bli självgående i att förstå vad som händer och kunna felsöka när saker inte fungerar.

Här är Microsofts "getting started"-dokumentation om ämnet, är nog läsvärt för TS om denne inte är bekant med verktygen: https://docs.microsoft.com/en-us/visualstudio/get-started/csh...

Gissning angående problemet (svårt att veta något utan helheten): kan det vara så att "Kön"-propertyn inte innehåller exakt "K", "M" eller "A"?

Visa signatur

Desktop spel m.m.: Ryzen 9800X3D || MSI X870 Tomahawk Wifi || MSI Ventus 3x 5080 || Gskill FlareX 6000 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Arbetsstation: Ryzen 7945HX || Minisforum BD790i || Asus Proart 4070 Ti Super || Kingston Fury Impact 5600 65 GB || WD SN850 2TB || Samsung 990 Pro 2TB || Fractal Ridge
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem
Skrivet av evil penguin:

Ja, att lära sig att använda debuggern så snart som möjligt är verkligen ett viktigt steg för att bli självgående i att förstå vad som händer och kunna felsöka när saker inte fungerar.

Här är Microsofts "getting started"-dokumentation om ämnet, är nog läsvärt för TS om denne inte är bekant med verktygen: https://docs.microsoft.com/en-us/visualstudio/get-started/csh...

Gissning angående problemet (svårt att veta något utan helheten): kan det vara så att "Kön"-propertyn inte innehåller exakt "K", "M" eller "A"?

Det gör den, både med stor och liten bokstav.... Har kört med debuggern men förstår inte vad som händer för den hoppar bara över if satsen när while loopen avslutas😵

Permalänk
Medlem
Skrivet av Ruban31:

Det gör den, både med stor och liten bokstav.... Har kört med debuggern men förstår inte vad som händer för den hoppar bara över if satsen när while loopen avslutas😵

Att propertyn skulle ha ett värde med t.ex. strängen "M" som uppfyller "både med stor och liten bokstav" låter för mig väldigt förvirrande. Hur ser det ut? "Mm" / "mM"? Eller snarare att du testat både "m" och "M"?
Men inget annat än "M" skulle ju vara lika med strängen "M", som du jämför med.

Det råd jag kan ge är väl annars att titta på värdena som används i jämförelserna innan du stegar vidare och den hoppar förbi(?). (Eller då att lägga upp koden så att det för oss andra går att se vad förutsättningarna är)

Visa signatur

Desktop spel m.m.: Ryzen 9800X3D || MSI X870 Tomahawk Wifi || MSI Ventus 3x 5080 || Gskill FlareX 6000 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Arbetsstation: Ryzen 7945HX || Minisforum BD790i || Asus Proart 4070 Ti Super || Kingston Fury Impact 5600 65 GB || WD SN850 2TB || Samsung 990 Pro 2TB || Fractal Ridge
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem
Skrivet av evil penguin:

Att propertyn skulle ha ett värde med t.ex. strängen "M" som uppfyller "både med stor och liten bokstav" låter för mig väldigt förvirrande. Hur ser det ut? "Mm" / "mM"? Eller snarare att du testat både "m" och "M"?
Men inget annat än "M" skulle ju vara lika med strängen "M", som du jämför med.

Det råd jag kan ge är väl annars att titta på värdena som används i jämförelserna innan du stegar vidare och den hoppar förbi(?). (Eller då att lägga upp koden så att det för oss andra går att se vad förutsättningarna är)

I min klass för passagerarna så har jag en metod för kön där jag har lagt in case M och case m utifall man skriver med stor eller liten bokstav. Kanske jag som missuppfattar dig, men det har funkat iaf. Ska kolla det du pratar om imorgon, tack för att du har svarat! 😊

Permalänk
Medlem
Skrivet av SexMachine:

Ja då kan jag klippa in programmet i visual studio och köra det där. Är det i en fil? Min poke så ut såhär.

/// <summary> /// poke metod som ger olika resultat beroende på kön och ålder /// </summary> public void poke() { if (sex.Substring(0, 1) == "M" && age > 50) { Console.WriteLine("Sätt dig ner i bussen!"); }else if (sex.Substring(0, 1) == "M" && age < 50) { Console.WriteLine("SMACK!!"); } else if (sex.Substring(0, 1) == "K" && age > 50) { Console.WriteLine("Sluta!"); } else if (sex.Substring(0, 1) == "K" && age < 50) { Console.WriteLine("TiHi"); } }

Ja jag hade väl kunnat skicka filen, blir nog lite mycket att pasta in koden här. Den ska dock in den 2 jan, så hinner du inte är det lugnt. Ska sätta mig en stund imorgon igen och se om jag kan lösa det. Tack ska du ha! 😊

Permalänk
Medlem

Det där täcker inte om age == 50

Permalänk
Medlem
Skrivet av SexMachine:

Ja då kan jag klippa in programmet i visual studio och köra det där. Är det i en fil? Min poke så ut såhär.

/// <summary> /// poke metod som ger olika resultat beroende på kön och ålder /// </summary> public void poke() { if (sex.Substring(0, 1) == "M" && age > 50) { Console.WriteLine("Sätt dig ner i bussen!"); }else if (sex.Substring(0, 1) == "M" && age < 50) { Console.WriteLine("SMACK!!"); } else if (sex.Substring(0, 1) == "K" && age > 50) { Console.WriteLine("Sluta!"); } else if (sex.Substring(0, 1) == "K" && age < 50) { Console.WriteLine("TiHi"); } }

Vad är din se.Substring i koden?