4 svar
67 visningar
Ruban 2
Postad: 30 dec 2021 15:10

Mitt program hoppar över min else-if sats

Hej! Håller på med min sista uppgift för programmering 1. Jag har gjort en buss simulator som man kan lägga till och ta bort passagerare bland annat. Finns även en metod som skall kunna "peta" på olika passagerare i bussen och det är här det krånglar för mig. När man har valt vem man vill peta på så hoppar koden förbi min else-if sats, där mina olika cases finns för olika utfall beroende på ålder och kön på personen man har petat på. Vore extremt tacksam på om någon kan förklara för mig vad jag har missat. Tack på förhand!

[code]

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!


[code]
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);
}[/code]

Peter 653
Postad: 30 dec 2021 15:44 Redigerad: 30 dec 2021 15:44

Svårt att säga, men break gör att man lämnar whileloopen. Kan det vara det kanske?

Jag tänker på break här:

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;
}
}

Ruban 2
Postad: 30 dec 2021 15:48
Peter skrev:

Svårt att säga, men break gör att man lämnar whileloopen. Kan det vara det kanske?

Jag tänker på break här:

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;
}
}

Jo men det är den if satsten som kommer efter den while loopen. Den som skall ge olika utfall för vad det är för person som sitter på just den platsen. Efter while loopen tar slut så hoppar koden bara över if-satsen som kommer efter, och går ur metoden istället. 

Peter 653
Postad: 30 dec 2021 16:07

OK, det är svårt att hjälpa utan att ha hela programmet eller innehållet och definitionen av plats och vuxengräns. Ett tips är att göra lite debugutskrifter så att du kan se vad t.ex. plats[index].Ålder innehåller.

Laguna Online 17496
Postad: 30 dec 2021 17:20

Det är svårläst när det inte är indenterat.

Svara Avbryt
Close