Permalänk

Loop

Hej!

Har en uppgift i skolan där jag ska skriva ett program som kontrollerar att antal passagerare på tåget uppfyller kravet enlig specifikationen. Tåget ska vara tomt vid start och avslut av resan. Inga passagerare ska vänta på perrongen vid sista stationen.

första insertern innehåller två heltal. Tågets kapacitet och antal stationer.

Inmatningen på övriga stationer består av tre heltal.
Stiger av.
Stiger på.
Stannar.

Inmatningen ska ske i den ordning som tåget besöker stationerna. Och heltalen liggerr mellan 0 - 40

Såhär ser min kod ut just nu. Jag har fastnat och ber er om tips hur jag ska gå tillväga

static void Main(string[] args) { { Console.WriteLine("Ange tågets kapacitet: "); int num1 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Ange antal stationer: "); int num2 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Tågets kapacitet är: " + num1); Console.WriteLine("Antal stationer är: " + num2); Console.WriteLine("Hur många resenärer sitter på tåget? "); int num3 = Convert.ToInt32(Console.ReadLine()); int kapacitet = 40; int stationer = 2; int antal = 0; int nuvarandeStation = 0; int stannar = 0; int lämmnar = 0; while (nuvarandeStation < stationer) { Console.WriteLine("Hur många stiger av? "); antal = antal - Convert.ToInt32(Console.ReadLine()); Console.WriteLine(antal); Console.WriteLine("Hur många stiger på? "); antal = antal + Convert.ToInt32(Console.ReadLine()); Console.WriteLine(antal); Console.ReadLine(); if (antal < 0 && antal > 40) { Console.WriteLine("Detta är inte möjligt"); break; } nuvarandeStation++; } Console.ReadLine();

Permalänk
Hedersmedlem

Har du funderat på vad du gör med num1, num2 och num3 senare i koden?

Namnen är extremt intetsägande också, de bör ha namn mer i stil med de variabler du sätter senare.

Edit: Har du nåt mer exakt krav på hur det ska vara gjort, förresten? Som det ser ut nu är det ju upp till användaren att se till att det blir tomt till slutet av resan, är det meningen?

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
NAS: 6700K/16GB/Debian+ZFS | Backup (offsite): 9600K/16GB/Debian+ZFS

Permalänk
Hedersmedlem

Vad har du fastnat på?

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem

"if (antal < 0 && antal > 40)" kommer bara vara sant om antal både är under noll och över 40 samtidigt. Du tänker nog "if (antal < 0 || antal > 40)"

Visa signatur

i5-7600k . GTX 1080 . 16 GB

Permalänk
Skrivet av Thomas:

Har du funderat på vad du gör med num1, num2 och num3 senare i koden?

Namnen är extremt intetsägande också, de bör ha namn mer i stil med de variabler du sätter senare.

Edit: Har du nåt mer exakt krav på hur det ska vara gjort, förresten? Som det ser ut nu är det ju upp till användaren att se till att det blir tomt till slutet av resan, är det meningen?

Det är meningen att användaren kontrollerar att det inte stiger på mer än 40 personer. Så användaren ska anteckna hur många passagerare som kliver på respektive av vid varje station och hur många som får vänta på nästa tåg.

Så jag ska skriva ett program som kontrollerar antal passagerare på tåget uppfyller kravet.

Tåget ska vara tomt vid start och avslut.

Ska tänka mer i banorna som du nämnde i första meningen med variablarna, ska se vad jag kommer fram till! Tack

Permalänk
Skrivet av giplet:

Vad har du fastnat på?

Jag har fastnat på if satsen. Programmet kan fortsätta köra i if satsen. Men när jag försöker på else if så fortsätter den inte loopa nästa station.

static void Main(string[] args) { { Console.WriteLine("Ange tågets kapacitet: "); int kapacitet = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Ange antal stationer: "); int stationer = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Tågets kapacitet är: " + kapacitet); Console.WriteLine("Antal stationer är: " + stationer); Console.WriteLine("Hur många resenärer sitter på tåget? "); int antal = Convert.ToInt32(Console.ReadLine()); int nuvarandeStation = 0; int stannar = 0; int lämmnar = 0; while (nuvarandeStation < stationer) { Console.WriteLine("Hur många stiger av? "); antal = antal - Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Personer på bussen just nu : " + antal); Console.WriteLine("Hur många stiger på? "); antal = antal + Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Personer på bussen just nu : " + antal); Console.ReadLine(); Console.WriteLine("Hur många stannar? "); antal = antal; Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Personer på bussen just nu : " + antal); Console.WriteLine("Framme vid station"); if (antal < 0 || antal > 40) { Console.WriteLine("Detta är inte möjligt"); break; } else if (antal > 0 || antal < 40) { Console.WriteLine("Detta är möjligt"); break; } nuvarandeStation++; } Console.ReadLine(); }

Permalänk
Avstängd

Ett uppenbart fel jag ser är att du har nuvarandeStation++ utanför dina if-satser, vilket blir ett problem eftersom du kör break i dem och då kommer programmet aldrig fram till nuvarandeStation++. Break bryter alltså inte if utan while-loopen så att den börjar på nästa iteration. Men du behöver inte break alls så ta bort det bara.