Problem med vektor och try catch
I slutuppgift programmering 1 så ska man simulera en buss och passagerare med hjälp av en vektor som håller heltal.
Sedan ska man med hjälp av meny som användare kunna göra olika val. Hittills har jag lyckats ok tycker jag men problemet är att jag kan fortsätta mata in tal i vektorn som bara ska kunna hålla 25 tal.
Dessa överlappar sedan varandra i vektorn.
Mitt andra problem är att jag försökt mig på en try catch som ska hantera fel inmatningar. (icke tal)
Men får det inte riktigt att fungera.
Har bara dessa två problem kvar, hade varit skönt att få lite hjälp :) Tack
Här är koden
using System;
namespace MinBuss
{
class Program
{
public static void Main(string[] args)
{
var minbuss = new Buss();
minbuss.Run();
Console.Write("Press any key to exit the program......");
Console.ReadKey();
}
}
}
class Buss
{
public int[] passenger = new int[25];
public int total_passenger;
public void Run()
{
int menu = 0;
do
{
Console.WriteLine("*******************************************************");
Console.WriteLine("Welcome to the bus simulator!");
Console.WriteLine("Choose an alternative:");
Console.WriteLine("1. Add passenger");
Console.WriteLine("2. Check the age of the passengers on the bus");
Console.WriteLine("3. Calculate the total age of the passengers");
Console.WriteLine("0. Exit the program!");
Console.WriteLine("******************************************************");
//menu = int.Parse(Console.ReadLine());
try
{
//Läser in användarens val, konverterar string till int och lagrar i variabeln choice.
menu = int.Parse(Console.ReadLine());
}
catch
{
//Låter användaren veta att inmatning var felaktig.
Console.WriteLine("Invalid");
}
switch (menu)
{
case 1:
add_passenger();
break;
case 2:
print_buss();
break;
case 3:
calc_total_age();
break;
}
} while (menu != 0);
}
public void add_passenger()
{
Console.WriteLine("How many passengers would you like to add?");
int addPass = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < addPass; i++)
{
//trycatch om anv matar in något annat än siffror
//25 posiutioner, säg till om för många!
Console.WriteLine("Write the age of the passenger you would like to add: ");
int pass = Convert.ToInt32(Console.ReadLine());//Konvertera string till int
passenger[i] = pass; //Adderar värdet till vektoren
if (pass > 25)
{
Console.WriteLine("The bus is full!");
}
}
}
public void print_buss()
{
Console.WriteLine("The ages of the passengers on the bus are: ");
for (int i = 0; i < passenger.Length; i++)
{
Console.WriteLine(passenger[i] + "years old");
}
}
public int calc_total_age()
{
int sum = 0;
for (int i = 0; i < passenger.Length; i++)
{
sum += passenger[i];
}
int totalAge = sum;
Console.WriteLine("The total age of the passengers is " + totalAge);
return totalAge;
}
}
Vad är det som inte fungerar?
Du sätter menu till 0 innan do-while vilket borde göra att loopen bryts om inmatningen misslyckas eftersom menu då inte ändras.
Om det är felet kan du sätta menu till -1 på raden innan try
Du kanske också borde ha en default i switch:en som skriver "Ogiltigt alternativ". Då behöver du även en "case 0: break" som inte går någonting.
Programmeraren skrev:Vad är det som inte fungerar?
Du sätter menu till 0 innan do-while vilket borde göra att loopen bryts om inmatningen misslyckas eftersom menu då inte ändras.
Om det är felet kan du sätta menu till -1 på raden innan tryDu kanske också borde ha en default i switch:en som skriver "Ogiltigt alternativ". Då behöver du även en "case 0: break" som inte går någonting.
Som det är nu så kraschar programmet om jag skriver tecken i menyn exempelvis. + jag får endast invalid om jag lägger till över 25 passagerare samtidigt. Lägger jag till en åt gången så kan jag lägga till hur många som helst. Och då överlappar de varann i vektorn när jag når 25. Förstår du mitt problem?
När du säger "kraschar", men du det eller avslutas loopen eftersom menu=0 oförändrat (enligt det jag skrev ovan)?
Gör en utskrift av menu efter catch men innan switch om du inte förstår vad jag menar. Men du menar nog att det kraschar i add_passenger. Men det jag skrev ovan är nog relevant oavsett.
add_passenger():
Här saknas try/catch på Convert.ToInt32 vilket jag antar att du behöver (vet inte om det är någon skillnad på att använda Convert.ToInt32 eller int.Parse).
Du har en loop som går addPass (det inmatade) antalet varv. Den bör du kolla innan loopen att den inte är >25.
"if (pass > 25)" kontrollerar åldern på den senast inmatade passageraren. Det är nog inte det du vill. Om du innan kollat att addPass <= 25 behöver du inte kontrollera inuti loopen också.
Definiera en variabel först, "int maxPassengers = 25;" och använd den på alla ställen du skriver 25. "Magiska tal" är fult och gör de dessutom svårt att ändra om man vill det.
Programmeraren skrev:När du säger "kraschar", men du det eller avslutas loopen eftersom menu=0 oförändrat (enligt det jag skrev ovan)?
Gör en utskrift av menu efter catch men innan switch om du inte förstår vad jag menar. Men du menar nog att det kraschar i add_passenger. Men det jag skrev ovan är nog relevant oavsett.add_passenger():
Här saknas try/catch på Convert.ToInt32 vilket jag antar att du behöver (vet inte om det är någon skillnad på att använda Convert.ToInt32 eller int.Parse).Du har en loop som går addPass (det inmatade) antalet varv. Den bör du kolla innan loopen att den inte är >25.
"if (pass > 25)" kontrollerar åldern på den senast inmatade passageraren. Det är nog inte det du vill. Om du innan kollat att addPass <= 25 behöver du inte kontrollera inuti loopen också.Definiera en variabel först, "int maxPassengers = 25;" och använd den på alla ställen du skriver 25. "Magiska tal" är fult och gör de dessutom svårt att ändra om man vill det.
Tack. Tror jag förstår vad du menar. If pass> 25 gör att jag får buss is full om jag skriver in en ålder över 25. Ska testa åtgärda detta med en int när jag kommer hem.
Menar du sedan att jag ska lägga in en till try catch i add pass?
Alla parsningar av text till int måste vara i try/catch, annars smäller det om det inmatade inte kan tolkas som en int.
Du har 3 ställen där man ska mata in ett tal. Vore snyggare att lägga den koden i en egen funktion som ställer frågan, tar emot inmatning, tolkar till int, och om det inte går (blir en "catch") loopar tillbaka och ställer frågan igen. Typ:
public int readInt(String question) {
while (true) {
try {
// print question
// read console
// parse int
// return int
} catch {
// write error message
}
}
Då kan du använda den på all tre ställena där du behöver ett tal.
"if (pass > 25)" är fel oavsett, du menar typ "if (i >= 25)" men då måste den ligga INNAN "passenger[i] = pass", 25 är ju utanför längden av passenger.
Bättre ta bort den och kolla att addPass <= 25 innan loopen.
Programmeraren skrev:Alla parsningar av text till int måste vara i try/catch, annars smäller det om det inmatade inte kan tolkas som en int.
Du har 3 ställen där man ska mata in ett tal. Vore snyggare att lägga den koden i en egen funktion som ställer frågan, tar emot inmatning, tolkar till int, och om det inte går (blir en "catch") loopar tillbaka och ställer frågan igen. Typ:
public int readInt(String question) {
while (true) {
try {
// print question
// read console
// parse int
// return int
} catch {
// write error message
}
}
Då kan du använda den på all tre ställena där du behöver ett tal.
"if (pass > 25)" är fel oavsett, du menar typ "if (i >= 25)" men då måste den ligga INNAN "passenger[i] = pass", 25 är ju utanför längden av passenger.
Bättre ta bort den och kolla att addPass <= 25 innan loopen.
Intressant. Säg att jag gör en funktion som denna. Hur anropar jag den i de andra funktionerna? Går det ha samma anrop på alla ställen där tal ska matas in? Förlåt. Väldigt ny fortfarande på programmering.
Jag har valt att sikta på betyg d. Med 3 funktioner. Kände att högre var lite överkurs. En funktion för all inmatning låter ju rätt. Är bara osäker på hur jag anropar den inuti de andra funktionerna
Du anropar samma på alla tre ställena.
int menu = readInt("Choose an alternative");
int addPass = readInt("How many passengers would you like to add?");
int pass = readInt("Write the age of the passenger you would like to add:");
Programmeraren skrev:Du anropar samma på alla tre ställena.
int menu = readInt("Choose an alternative");
int addPass = readInt("How many passengers would you like to add?");
int pass = readInt("Write the age of the passenger you would like to add:");
tack för din hjälp. ska sätta mig och försöka mig på detta nu :)
Programmeraren skrev:När du säger "kraschar", men du det eller avslutas loopen eftersom menu=0 oförändrat (enligt det jag skrev ovan)?
Gör en utskrift av menu efter catch men innan switch om du inte förstår vad jag menar. Men du menar nog att det kraschar i add_passenger. Men det jag skrev ovan är nog relevant oavsett.add_passenger():
Här saknas try/catch på Convert.ToInt32 vilket jag antar att du behöver (vet inte om det är någon skillnad på att använda Convert.ToInt32 eller int.Parse).Du har en loop som går addPass (det inmatade) antalet varv. Den bör du kolla innan loopen att den inte är >25.
"if (pass > 25)" kontrollerar åldern på den senast inmatade passageraren. Det är nog inte det du vill. Om du innan kollat att addPass <= 25 behöver du inte kontrollera inuti loopen också.Definiera en variabel först, "int maxPassengers = 25;" och använd den på alla ställen du skriver 25. "Magiska tal" är fult och gör de dessutom svårt att ändra om man vill det.
Behöver jag en public int maxPassangers också för att det ska fungera? Lyvkas inte riktigt
Ja, om du vill ersätta alla ställen det står "25" på. Men funkar utan (som du har nu med 25 överallt).
såhär ser min kod ut nu
using System;
namespace MinBuss
{
class Program
{
public static void Main(string[] args)
{
var minbuss = new Buss();
minbuss.Run();
Console.Write("Press any key to exit the program......");
Console.ReadKey();
}
}
}
class Buss
{
public int[] passenger = new int[25];
public int total_passenger;
private int pass;
public void Run()
{
int menu = -1;
do
{
Console.WriteLine("*******************************************************");
Console.WriteLine("Welcome to the bus simulator!");
Console.WriteLine("Make your choice:");
Console.WriteLine("1. Add passenger");
Console.WriteLine("2. Check the age of the passengers on the bus");
Console.WriteLine("3. Calculate the total age of the passengers");
Console.WriteLine("0. Exit the program!");
Console.WriteLine("******************************************************");
//menu = int.Parse(Console.ReadLine());
try
{
//Läser in användarens val, konverterar string till int och lagrar i variabeln choice.
menu = int.Parse(Console.ReadLine());
}
catch
{
//Låter användaren veta att inmatning var felaktig.
Console.WriteLine("Invalid");
}
switch (menu)
{
case 1:
add_passenger();
break;
case 2:
print_buss();
break;
case 3:
calc_total_age();
break;
}
} while (menu != 0);
}
public void add_passenger()
{
Console.WriteLine("How many passengers would you like to add?");
int addPass = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < addPass; i++)
{
//trycatch om anv matar in något annat än siffror
//25 posiutioner, säg till om för många!
Console.WriteLine("Write the age of the passenger you would like to add: ");
try
{
int pass = Convert.ToInt32(Console.ReadLine());//Konvertera string till int
passenger[i] = pass; //Adderar värdet till vektoren
}
catch
{
Console.WriteLine("Choose a number");
}
if (pass > 25)
{
Console.WriteLine("The bus is full!");
}
}
}
public void print_buss()
{
Console.WriteLine("The ages of the passengers on the bus are: ");
for (int i = 0; i < passenger.Length; i++)
{
Console.WriteLine(passenger[i] + "years old");
}
}
public int calc_total_age()
{
int sum = 0;
for (int i = 0; i < passenger.Length; i++)
{
sum += passenger[i];
}
int totalAge = sum;
Console.WriteLine("The total age of the passengers is " + totalAge);
return totalAge;
}
}
Probelemet jag har nu är att att programmet kraschar när jag i menyn väljer val 1. och sedan skriver en bokstav istället för tal. Men om jag i meny skriver tal först och sedan kommer "age of passenger så fungerar min try catch loop där.
Hur får jag in try catch i roten på val add passenger? (Blir galen)
ska jag köra
try
{ for (int i =....
} ?
Förskte mig även på att lägga till en int med maxPassengers men får det inte att fungera :(
Tycker huvudloopen ser bra ut nu.
i add_passenger() måste du skydda Convert.ToInt32 med try / catch.
Eftersom du har samma behov på tre ställen tror jag fortfarande det blir enklare med en separat metod som du använder på alla tre ställena.
Nästa problemet att om du inte matar in ett tal så kommer det indexet (det i:et) hoppas över.
Du kan lösa detta på olika sätt:
A) Sätt en while(true) runt utskriften och try/catch:en. I try-delen sätter du "break;" efter passenger[i] = pass;, dvs då den lyckats ta in ett tal.
B) Byt for-loopen mot
int i = 0;
while (i < 25) { ...
och räkna upp variablen i efter du gjort passenger[i] = pass;
C) Med en metod som tar hand om fel och inte returnerar förrän ett tal matats in.
if (pass >25) ... förstår jag inte vad den ska göra, pass är ju åldern. Känns som den ska bort.
En metod för att läsa in ett tal kan se ut så här ungefär. Utan att ha provkompilerat så säkert småfel:
public int readInt(String question) {
while (true) {
try {
// print question
Console.WriteLine(question);
// read console and parse int
int x = Convert.ToInt32(Console.ReadLine()) return x;
} catch {
Console.WriteLine("Ange ett tal");
}
}
Programmeraren skrev:Tycker huvudloopen ser bra ut nu.
i add_passenger() måste du skydda Convert.ToInt32 med try / catch.
Eftersom du har samma behov på tre ställen tror jag fortfarande det blir enklare med en separat metod som du använder på alla tre ställena.Nästa problemet att om du inte matar in ett tal så kommer det indexet (det i:et) hoppas över.
Du kan lösa detta på olika sätt:A) Sätt en while(true) runt utskriften och try/catch:en. I try-delen sätter du "break;" efter passenger[i] = pass;, dvs då den lyckats ta in ett tal.
B) Byt for-loopen mot
int i = 0;
while (i < 25) { ...
och räkna upp variablen i efter du gjort passenger[i] = pass;C) Med en metod som tar hand om fel och inte returnerar förrän ett tal matats in.
if (pass >25) ... förstår jag inte vad den ska göra, pass är ju åldern. Känns som den ska bort.
En metod för att läsa in ett tal kan se ut så här ungefär. Utan att ha provkompilerat så säkert småfel:
public int readInt(String question) {
while (true) {
try {
// print question
Console.WriteLine(question);
// read console and parse int
int x = Convert.ToInt32(Console.ReadLine())return x;
} catch {
Console.WriteLine("Ange ett tal");
}
}
När jag gör en try catch i add_passenger blir addPass i for loopen ogiltig av någon anledning
public void add_passenger()
{
try
{
Console.WriteLine("How many passengers would you like to add?");
int addPass = Convert.ToInt32(Console.ReadLine());
}
catch
{
Console.WriteLine("Please choose a number:");
}
for (int i = 0; i < addPass; i++)
{
while (true)
{
//trycatch om anv matar in något annat än siffror
//25 posiutioner, säg till om för många!
Console.WriteLine("Write the age of the passenger you would like to add: ");
try
{
int pass = Convert.ToInt32(Console.ReadLine());//Konvertera string till int
passenger[i] = pass; //Adderar värdet till vektoren
break;
}
catch
{
Console.WriteLine("Choose a number");
}
Tillägg: 3 feb 2022 22:07
gjorde en public int addPass och då får jag det att fungera men menyn beter sig lite konstigt då och jag kickas ut till början om jag exempelvis skriver ett tecken i add pass
Problemet är att om du inte matar in ett tal så kommer du till catch, programmet skriver "Please choose a number:" men du kommer inte tillbaka till
Console.WriteLine("How many passengers would you like to add?");
int addPass = Convert.ToInt32(Console.ReadLine());
Och dessutom är addPass deklarerad i ett block(inom ett par av måsvingar) och då finns den inte utanför blocket.
Principen är att du måste loopa tills du fått in ett korrekt värde. Sen kan du låta programmet gå vidare. Att catch:a ett fel gör ingen nytta om programmet inte sen gör om inläsningen.
Att använda en separat metod som jag skrev ovan är både enklast och snyggast.
Programmeraren skrev:Problemet är att om du inte matar in ett tal så kommer du till catch, programmet skriver "Please choose a number:" men du kommer inte tillbaka till
Console.WriteLine("How many passengers would you like to add?");
int addPass = Convert.ToInt32(Console.ReadLine());
Och dessutom är addPass deklarerad i ett block(inom ett par av måsvingar) och då finns den inte utanför blocket.
Principen är att du måste loopa tills du fått in ett korrekt värde. Sen kan du låta programmet gå vidare. Att catch:a ett fel gör ingen nytta om programmet inte sen gör om inläsningen.
Att använda en separat metod som jag skrev ovan är både enklast och snyggast.
löste det nu genom en public addPass och hade missat break;
public void add_passenger() { while (true) { try { Console.WriteLine("How many passengers would you like to add?"); int addPass = Convert.ToInt32(Console.ReadLine()); break; } catch { Console.WriteLine("Please choose a number:"); } } for (int i = 0; i < addPass; i++) { while (true) { //trycatch om anv matar in något annat än siffror //25 posiutioner, säg till om för många! Console.WriteLine("Write the age of the passenger you would like to add: "); try { int pass = Convert.ToInt32(Console.ReadLine());//Konvertera string till int passenger[i] = pass; //Adderar värdet till vektoren break; } catch { Console.WriteLine("Choose a number");
Vet att denna lösningen är lite rörig som jag har nu. Men det är den jag kommer köra på för det känns som det är här jag ligger i nivå just nu. Detta fattar jag.
Det enda som jag har kvar är att hålla koll på när vektorn är full (25 tal)
Vill också tacka för all hjälp jag fått av dig programmeraren :)
Nu har du en fungerande loop högst upp för att ta in addPass.
Du kan deklarera addPass innan while-loopen så funkar det.int addPass = -1;
I for-loopen verkar du ha samma typ av konstruktion, det borde funka.
For-loopen kommer att bryta av sig själv eftersom du har "i < addPass" i den.
edit det blev visst inte rätt ändå, nu kan jag inte skriva in några passagerare istället utan kommer till menu
När programmet gör något "konstigt" är det enklast att lägga till utskrifter (som du tar bort när allt funkar).
Efter "int addPass = Convert.ToInt32(Console.ReadLine());", skriv ut addPass så du ser vad det blev.
Du kan göra samma sak i loopen där du sen tar in alla åldrar.
Programmeraren skrev:När programmet gör något "konstigt" är det enklast att lägga till utskrifter (som du tar bort när allt funkar).
Efter "int addPass = Convert.ToInt32(Console.ReadLine());", skriv ut addPass så du ser vad det blev.
Du kan göra samma sak i loopen där du sen tar in alla åldrar.
jag kickas ut till menu, komemr alltså inte vidare till for loopen nu när jag har try catch runt addPass
Nog bäst att du postar hela programmet här igen.
using System;
namespace MinBuss
{
class Program
{
public static void Main(string[] args)
{
var minbuss = new Buss();
minbuss.Run();
Console.Write("Press any key to exit the program......");
Console.ReadKey();
}
}
}
class Buss
{
public int[] passenger = new int[25];
public int total_passenger;
private int pass;
public int addPass;
public void Run()
{
int menu = -1;
do
{
Console.WriteLine("*******************************************************");
Console.WriteLine("Welcome to the bus simulator!");
Console.WriteLine("Make your choice:");
Console.WriteLine("1. Add passenger");
Console.WriteLine("2. Check the age of the passengers on the bus");
Console.WriteLine("3. Calculate the total age of the passengers");
Console.WriteLine("0. Exit the program!");
Console.WriteLine("******************************************************");
//menu = int.Parse(Console.ReadLine());
try
{
//Läser in användarens val, konverterar string till int och lagrar i variabeln menu.
menu = int.Parse(Console.ReadLine());
}
catch
{
//Låter användaren veta att inmatning var felaktig.
Console.WriteLine("Choose a number from the menu");
}
//switch och case meny som anropar våra metoder
switch (menu)
{
case 1:
add_passenger();
break;
case 2:
print_buss();
break;
case 3:
calc_total_age();
break;
}
} while (menu != 0);
}
public void add_passenger()
{
//
while (true)
{
try
{
Console.WriteLine("How many passengers would you like to add?");
int addPass = Convert.ToInt32(Console.ReadLine());
break;
}
catch
{
Console.WriteLine("Please choose a number:");
}
}
for (int i = 0; i < addPass; i++)
{
while (true)
{
//trycatch om anv matar in något annat än siffror
//25 posiutioner, säg till om för många!
Console.WriteLine("Write the age of the passenger you would like to add: ");
try
{
int pass = Convert.ToInt32(Console.ReadLine());//Konvertera string till int
passenger[i] = pass; //Adderar värdet till vektoren
break;
}
catch
{
Console.WriteLine("Choose a number");
}
}
}
}
public void print_buss()
{
Console.WriteLine("The ages of the passengers on the bus are: ");
for (int i = 0; i < passenger.Length; i++)
{
Console.WriteLine(passenger[i] + "years old");
}
}
public int calc_total_age()
{
int sum = 0;
for (int i = 0; i < passenger.Length; i++)
{
sum += passenger[i];
}
int totalAge = sum;
Console.WriteLine("The total age of the passengers is " + totalAge);
return totalAge;
}
}
Du deklarerar en ny "int addPass" när antalet ska matas in i början av add_passenger(), ta bort "int " framför.
Ta även bort "private in pass;" från början av Buss.
Du ska inte deklarera variabler med samma namn på flera ställen, förvirrande.
Programmeraren skrev:Du deklarerar en ny "int addPass" när antalet ska matas in i början av add_passenger(), ta bort "int " framför.
Ta även bort "private in pass;" från början av Buss.
Du ska inte deklarera variabler med samma namn på flera ställen, förvirrande.
aah, min miss. nu funkar det som det ska :) Tack för all hjälp
bara maxPassengers kvar. lyckas inte med den, tycker det blir så fruktansvärt rörigt. men ska jobba på det
Du kan strunta i maxPassengers. Om du vill få till det, se till att den deklareras och sätts till 25 som första variabel i class Buss.
Programmeraren skrev:Du kan strunta i maxPassengers. Om du vill få till det, se till att den deklareras och sätts till 25 som första variabel i class Buss.
skriver jag i över 25 st tal i add pass får jag choose a number i oändlighet. kan man ha två utgångar(utskrifter) och typ en break för att komma ur det?
using System;
namespace MinBuss
{
class Program
{
public static void Main(string[] args)
{
var minbuss = new Buss();
minbuss.Run();
Console.Write("Press any key to exit the program......");
Console.ReadKey();
}
}
}
class Buss
{
public int[] passenger = new int[25];
public int total_passenger;
public int addPass;
public void Run()
{
int menu = -1;
do
{
Console.WriteLine("*******************************************************");
Console.WriteLine("Welcome to the bus simulator!");
Console.WriteLine("Make your choice:");
Console.WriteLine("1. Add passenger");
Console.WriteLine("2. Check the age of the passengers on the bus");
Console.WriteLine("3. Calculate the total age of the passengers");
Console.WriteLine("0. Exit the program!");
Console.WriteLine("******************************************************");
//menu = int.Parse(Console.ReadLine());
try
{
//Läser in användarens val, konverterar string till int och lagrar i variabeln menu.
menu = int.Parse(Console.ReadLine());
}
catch
{
//Låter användaren veta att inmatning var felaktig.
Console.WriteLine("Choose a number from the menu");
}
//switch och case meny som anropar våra metoder
switch (menu)
{
case 1:
add_passenger();
break;
case 2:
printPass();
break;
case 3:
calcAge();
break;
}
} while (menu != 0);
}
public void add_passenger()
{
//metod för att lägga till tal(passagerare) i våran vektor och spara deras ålder
while (true)
{
try
{
//mata in antal passagerare
Console.WriteLine("How many passengers would you like to add?");
addPass = Convert.ToInt32(Console.ReadLine());
break;
}
catch
{
Console.WriteLine("Please choose a number:");
}
}
//mata in ålder
for (int i = 0; i < addPass; i++)
{
while (true)
{
Console.WriteLine("Write the age of the passenger you would like to add: ");
//Konvertera int och addera värdet till vektorn
try
{
int pass = Convert.ToInt32(Console.ReadLine());
passenger[i] = pass;
break;
}
catch
{
Console.WriteLine("Choose a number");
}
}
}
}
//Metod för att lista passagerarna och deras ålder sparade i vektorn
public void printPass()
{
Console.WriteLine("The ages of the passengers on the bus are: ");
for (int i = 0; i < passenger.Length; i++)
{
Console.WriteLine(passenger[i] + "years old");
}
}
//metod för att räkna ut total ålder på passagerare.
public int calcAge()
{
int sum = 0;
for (int i = 0; i < passenger.Length; i++)
{
sum += passenger[i];
}
int totalAge = sum;
Console.WriteLine("The total age of the passengers is " + totalAge);
return totalAge;
}
}
Såhär ser koden ut nu. när jag uppnår 25 tal i vektorn i add_passenger så kommer jag till catch "please choose a number" som loopas i oändlighet. Om jag vill ha en till utgång som "the bus is full" och gå åter till menyn. behöver jag använda mig av en bool och case då?
Efter att du tagit in addPass, kontrollera att addPass inte är större än 25. Om det är det, sätt den till 25 och skriv ut att maxantalet är 25 och att du justerat till det.
Du kan också göra så att du skapar vektorn när du vet hur stor ben behöver vara. Efter att du tagit addPass kan du göra
passenger = new int[assPass];
Då behöver du inte ha new int[25] vid deklarationen i början av class Buss.
Att det blir oändlig loop efter 25 stycken borde bara ske om du matar in ett större tal än 25 på antal passagerare. I så fall är det som händer att du försöker sätta in ålder med ett index som är större än 25 vilket orsakar ett exception eftersom du hamnar utanför vekorn. Då hamnar du i catch. Löses enligt ovan.
Programmeraren skrev:Efter att du tagit in addPass, kontrollera att addPass inte är större än 25. Om det är det, sätt den till 25 och skriv ut att maxantalet är 25 och att du justerat till det.
Du kan också göra så att du skapar vektorn när du vet hur stor ben behöver vara. Efter att du tagit addPass kan du göra
passenger = new int[assPass];
Då behöver du inte ha new int[25] vid deklarationen i början av class Buss.
Att det blir oändlig loop efter 25 stycken borde bara ske om du matar in ett större tal än 25 på antal passagerare. I så fall är det som händer att du försöker sätta in ålder med ett index som är större än 25 vilket orsakar ett exception eftersom du hamnar utanför vekorn. Då hamnar du i catch. Löses enligt ovan.
Känner mig helt bränd nu, begöver jag deklarera 25 efter public int addpass
eller löser jag det med en if sats i metoden?
Du deklararer den i början på Buss
class Buss {
public int[] passenger;
public int addPass;
Och du allokerar vektorn då du vet storleken:
public void add_passenger() {
while (true) {
try {
Console.WriteLine("How many passengers would you like to add?");
addPass = Convert.ToInt32(Console.ReadLine());
if (addPass > 25) {
Console.WriteLine("25 is max");
continue; // back to start of loop }
passenger = new int|addPass];
break;
Har som vanligt inte kompilerat så kan vara syntaxfel etc.