Värden skrivs över i vektor (uppgift bussen)
Hej!
Jag har de senaste dygnen arbetat med uppgiften bussen. Det mesta verkar funka men här är en del jag inte lyckas lösa.
Exempel: Jag har 25 platser i min buss, jag fyller upp 3 platser [0][1][2]. Allt fungerar fint - jag kan sortera efter ålder osv. Men så fort jag väljer att fylla på med ytterligare 3 platser så skrivs dem in [3][4][5] och de första 3 återgår till 0?
class Buss
{
public int[] passenger = new int[25]; //vektor deklarerad
public int new_passengers; //int där vi lägger det vi använder från vektorn
public void Run()
{
Console.WriteLine("***************************");
Console.WriteLine("Welcome to the bus!");
Console.WriteLine("***************************");
Console.WriteLine(" ");
Console.WriteLine(" ");
Console.WriteLine(" ");
int menu; //int meny deklareras
do
{
Console.WriteLine("***************************************************"); //menyn användaren ser
Console.WriteLine("Chose an action:");
Console.WriteLine("***************************************************");
Console.WriteLine("1. Add passenger");
Console.WriteLine("2. Check the age of all passengers.");
Console.WriteLine("3. Calculate the total age of all passengers.");
Console.WriteLine("4. Calculate the average age of the passengers.");
Console.WriteLine("5. Identify the oldest passenger.");
Console.WriteLine("6. Identify the youngest passenger.");
Console.WriteLine("7. Identify passengers between chosen ages.");
Console.WriteLine("8. Sort passengers after age. ");
Console.WriteLine("0. Quit program. ");
Console.WriteLine("***************************************************");
Console.WriteLine(" ");
menu = int.Parse(Console.ReadLine()); //översätter string till int
switch (menu) //switch case meny
{
case 1:
Add_passenger();
break;
case 2:
Print_buss();
break;
case 3:
Calc_total_age();
break;
case 4:
Calc_average_age();
break;
case 5:
Max_age();
break;
case 6:
Min_age();
break;
case 7:
Find_age();
break;
case 8:
Sort_buss();
break;
case 0:
menu = 0;
break;
default:
Console.WriteLine("This action is not available, please try again by typing a number from the menu (0 - 8).");
break;
}
} while (menu != 0); //avslutas!
}
public void Add_passenger() //metod för att lägga till passagerare
{
Console.WriteLine("How many passengers would you like to add?");
try //try catch för att vi endast vill ha siffror
{
int size = Convert.ToInt32(Console.ReadLine());
if (size > 25) //endast siffror under 25 är ok
{
Console.WriteLine("The bus doesn't have that many seats available, sorry."); //annars skrivs detta ut
}
else //om de skriver siffror under 25
{
for (int i = 0; i < size; i++) //så körs for-loopen
{
Console.WriteLine("Add a passenger by writing the age: ");
int added_passengers = Convert.ToInt32(Console.ReadLine()); //översätt svaret till int och lagra i vår variabel
passenger[i] = added_passengers; //lagra i vektorn
new_passengers++; //kör om på nytt
}
}
}
catch
{
Console.WriteLine("You can only type in the passengers age, please try again."); //visas om de skriver bokstäver
}
}
public void Print_buss() //metod för att skriva ut alla passagerare
{
for (int i = 0; i < new_passengers; i++) //for-loop som kör igenom alla_passagerare-variabeln
{
Console.WriteLine("This passenger is " + passenger[i] + " years old."); //skriver ut passagerarna i vektorn
Console.WriteLine(" ");
}
}
public void Calc_total_age() //metod för att räkna alla passagerares ålder
{
int sum = 0;
for (int i = 0; i < new_passengers; i++) //for-loop som kör igenom alla_passagerare-variabeln
{
sum += passenger[i]; //läser in passagerarna från vektorn & adderar och lägger in i variabeln sum
}
Console.WriteLine("The total age of the passengers is " + sum + ".");
Console.WriteLine(" ");
}
public void Calc_average_age() //metod för att räkna ut medelåldern
{
int sum = 0;
for (int i = 0; i < new_passengers; i++) //for-loop som kör igenom alla_passagerare-variabeln
{
sum += passenger[i]; //läser in passagerarna från vektorn & adderar och lägger in i variabeln sum
}
double dsum = Convert.ToDouble(sum); //översätter till en double
double dsum1 = dsum / new_passengers; //räknar ut medelåldern
Console.WriteLine("The passengers average age sums up to " + dsum1 + " years old.");
Console.WriteLine(" ");
}
public int Max_age() //metod för att räkna ut maxåldern
{
int maxAge = 0; //ny variabel
for (int i = 0; i < new_passengers; i++) //for-loop som kör igenom alla_passagerare-variabeln
{
if (passenger[i] > maxAge)
{
maxAge = passenger[i]; //lägger alla i vektorn i variabeln maxAge
}
}
Console.WriteLine("The oldest passenger is " + maxAge + " years old.");
Console.WriteLine(" ");
return maxAge;
}
public int Min_age() //metod för att räkna ut minåldern
{
int minAge = 2000; //ny variabel
for (int i = 0; i < new_passengers; i++) //for-loop som kör igenom alla_passagerare-variabeln
{
if (passenger[i] < minAge)
{
minAge = passenger[i]; //lägger alla i vektorn i variabeln minAge
}
}
Console.WriteLine("The youngest passenger is " + minAge + " years old.");
Console.WriteLine(" ");
return minAge;
}
public void Find_age()
{
{
Console.WriteLine("Whats the youngest age you want to search for?"); //användaren får välja lägsta ålder
int low = Convert.ToInt32(Console.ReadLine()); //lagrar i int
Console.WriteLine("Whats the oldest age you want to search for?");
int high = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Passengers between " + low + " and " + high + " sits on seats: ");
for (int i = 0; i < new_passengers; i++) //for-loop som kör igenom "alla_passagerare"-variabeln
{
if (passenger[i] > low || passenger[i] > high) //identifierar spannet
{
Console.WriteLine("Seat " + i); //skriver ut sätet
}
}
Console.WriteLine(" ");
Console.WriteLine("NOTE; There is 25 seats numbered between 0 and 24."); //eftersom det börjar på noll...
}
}
public void Sort_buss()
{
int max = passenger.Length - 1;
for (int i = 1; i < max; i++)
{
int nrLeft = max - i;
for (int j = 0; j < nrLeft; j++)
{
if (passenger[j] > passenger[j + 1])
{
int temp = passenger[j];
passenger[j] = passenger[j + 1];
passenger[j + 1] = temp;
}
}
}
for (int i = 1; i < passenger.Length; i++)
Console.WriteLine(passenger[i]);
}
class Program
{
static void Main(string[] args)
{
var minbuss = new Buss(); //programmet
minbuss.Run(); //körs
Console.Write("Press any key to continue...");
Console.ReadKey(true);
}
}
}
}
Nej du skriver över de första tre platserna när du lägger till passagerare.
Detta eftersom du alltid börjar loopen i Add_passenger vid 0.
Ett förslag är att du istället börjar loopen vid new_passengers.
(En annan brist i programmet är att det låter dig lägga till upp till 25 passagerare i taget.)
Tack för hjälpen!
Lyckades lösa det (och ditt extra tips)! :)