Behöver hjälp med en skoluppgift

Permalänk
Medlem

Behöver hjälp med en skoluppgift

Finns de någon vänlig själ som skulle kunna hjälpa mig att lösa ett problem jag har med en uppgift i skolan. Har följande problem. Om jag matar in 1 eller 2 som stations så kraschar det. Om jag matar in 3 eller fler så startar ”resan” på station 2.

using System; namespace Delmoment1_Inlämningsuppgift2_Tåg { internal class Program { static void Main(string[] args) { int capacity; int stations; int leaves = 0; int boarding = 0; int sum; string indata; while (true) { Console.WriteLine("Skriv in tågets kapacitet: "); indata = Console.ReadLine(); capacity = int.Parse(indata); if (capacity <= 0 || capacity > 40) { Console.WriteLine("Omöjlig"); } else { break; } } while (true) { Console.WriteLine("Skriv in antal stationer: "); indata = Console.ReadLine(); stations = int.Parse(indata); if (stations <= 0 || stations > 10) { Console.WriteLine("Omöjlig"); } else { break; } } for (int i = 0; i < stations; i++) { int stays; if (i != 0) { Console.WriteLine("Skriv in antal som lämnar tåget på station " + (i + 1) + ": "); indata = Console.ReadLine(); leaves += int.Parse(indata); } else if (i++ == stations ) { Console.WriteLine("Skriv in antal som lämnar tåget på station " + (i + 1) + ": "); indata = Console.ReadLine(); Console.WriteLine("Alla " + (boarding - leaves) + " måste lämna slutdestinationen."); } while (true) { if (i < stations-1) { Console.WriteLine("Skriv in antal som stiger på tåget " + (i + 1) + ": "); indata = Console.ReadLine(); boarding += int.Parse(indata); if ((boarding - leaves) > capacity) { Console.WriteLine("Omöjligt"); Console.WriteLine("Det är " + ((boarding - leaves) - capacity) + " passagerare för mycket som vill stiga på tåget!"); boarding = boarding - int.Parse(indata); } else { break; } } } Console.WriteLine("Skriv in antal stannar kvar på stationen " + (i + 1) + ": "); indata = Console.ReadLine(); stays = int.Parse(indata); sum = boarding - leaves; if (sum > capacity) { Console.WriteLine("Omöjligt"); Console.WriteLine("Det är " + (sum - capacity) + " passagerare för mycket som vill stiga på tåget!"); break; } else { Console.WriteLine("Det finns " + (capacity - sum) + " platser kvar på tåget!"); } } } } }

Permalänk
Medlem

else if (i++ == stations )

Den raden är suspekt. Du bör kika på vad exakt som händer där. Man kan även skriva ++i (Jag säger inte att du ska göra sådär men visar bara på att även denna finns).

Så kolla vad den gör samt fundera på vad du faktiskt vill göra.

Det bästa sättet att förstå vad som händer är att stega igenom med debuggern. Om det inte är något du gjort tidigare så bör du kolla in på det. Det är väldigt enkelt att göra.

Man sätter en breakpoint på en rad och sedan kan man använda knapparna längst upp i Visual Studios eller tangenterna (typ F10-F12). Då kan man gå rad för rad och kolla värden i koden om man håller på dem. Då får du en bättre förståelse vad som händer med värden i variabler och då kan du kanske se vad som blir fel och när.

Permalänk

Den kraschar aldrig, däremot skapar du en oändlig loop. While vilkoret är alltid sant om du sätter stations till 1 eller 2. om du sätter stations till 1 så kommer alltid "i" vara större än ditt vilkor, om du sätter det till 2 så kommer "i" alltid vara lika med ditt vilkor.

Visa signatur

MSI B450 TOMAHAWK,Amd Ryzen 7 2700x,Evga geforce 980ti