C# Bussen
Hej!
Är ny på programmering. Har i likhet med ett flertal andra trådskapare fått Bussen som slutprojekt i den kurs jag läser. Är i stort nöjd med hur jag får koden att funka så här långt, men en sak begriper jag inte.
Min fundering rör menyval 3 i koden: calc_total_age.
Om jag definierar metoden så här: "public void calc_total_age" så funkar det utmärkt men enligt instruktionen till uppgiften är detta sätt inte att föredra.
Om jag istället definierar metoden så som jag tror är mer "korrekt": "public int calc_total_age" så slutar menyval 3 att fungera. Det händer ingenting när menyvalet är markerat och jag trycker Enter. Antar att det har nåt med metodanropet att göra och har provat lite olika sätt att anropa metoden men utan att lyckas.
Skulle vara så tacksam om nån kan ha överseende med den långa koden och hjälpa mig förstå vad som blir fel. Är det metodanropet eller nåt annat? Hjälp!
using System;
using System.Collections.Generic;
namespace Bussen
{
class Buss
{
public int [] passagerare = new int[25];
public int maxPassagerare = 25;
public int antal_passagerare = 0;
public void Run()
{
string[] menuOptions = new string[] {"\t1) Lägg till passagerare", "\t2) Skriv ut passagerarlista", "\t3) Beräkna
passagerarnas totala ålder", "\t4) Beräkna passagerarnas medelålder", "\t5) Skriv ut passagerare med högst ålder",
"\t6) Sök passagerare efter ålder", "\t7) Sortera passagerare efter ålder", "\t*** Avsluta ***"};
int menuSelected = 0;
while (true)
{
Console.Clear();
Console.WriteLine();
Console.WriteLine("====================================== BUSSEN =============================================");
Console.WriteLine("\n - Statistikprogram över resenärerna på Linje 1 -\n");
Console.WriteLine(" Ett delprojekt i Ängköping kommuns utvärdering av gratis kollektivtrafik.\n");
Console.Write("==========================================================================================\n\n");
Console.CursorVisible = false;
if (menuSelected == 0)
{
Console.WriteLine("-->" + menuOptions[0] + "\n");
Console.WriteLine(menuOptions[1] + "\n");
Console.WriteLine(menuOptions[2] + "\n");
Console.WriteLine(menuOptions[3] + "\n");
Console.WriteLine(menuOptions[4] + "\n");
Console.WriteLine(menuOptions[5] + "\n");
Console.WriteLine(menuOptions[6] + "\n");
Console.WriteLine(menuOptions[7] + "\n");
}
else if (menuSelected == 1)
{
Console.WriteLine(menuOptions[0] + "\n");
Console.WriteLine("-->" + menuOptions[1] + "\n");
Console.WriteLine(menuOptions[2] + "\n");
Console.WriteLine(menuOptions[3] + "\n");
Console.WriteLine(menuOptions[4] + "\n");
Console.WriteLine(menuOptions[5] + "\n");
Console.WriteLine(menuOptions[6] + "\n");
Console.WriteLine(menuOptions[7] + "\n");
}
else if (menuSelected == 2)
{
Console.WriteLine(menuOptions[0] + "\n");
Console.WriteLine(menuOptions[1] + "\n");
Console.WriteLine("-->" + menuOptions[2] + "\n");
Console.WriteLine(menuOptions[3] + "\n");
Console.WriteLine(menuOptions[4] + "\n");
Console.WriteLine(menuOptions[5] + "\n");
Console.WriteLine(menuOptions[6] + "\n");
Console.WriteLine(menuOptions[7] + "\n");
}
else if (menuSelected == 3)
{
Console.WriteLine(menuOptions[0] + "\n");
Console.WriteLine(menuOptions[1] + "\n");
Console.WriteLine(menuOptions[2] + "\n");
Console.WriteLine("-->" + menuOptions[3] + "\n");
Console.WriteLine(menuOptions[4] + "\n");
Console.WriteLine(menuOptions[5] + "\n");
Console.WriteLine(menuOptions[6] + "\n");
Console.WriteLine(menuOptions[7] + "\n");
}
else if (menuSelected == 4)
{
Console.WriteLine(menuOptions[0] + "\n");
Console.WriteLine(menuOptions[1] + "\n");
Console.WriteLine(menuOptions[2] + "\n");
Console.WriteLine(menuOptions[3] + "\n");
Console.WriteLine("-->" + menuOptions[4] + "\n");
Console.WriteLine(menuOptions[5] + "\n");
Console.WriteLine(menuOptions[6] + "\n");
Console.WriteLine(menuOptions[7] + "\n");
}
else if (menuSelected == 5)
{
Console.WriteLine(menuOptions[0] + "\n");
Console.WriteLine(menuOptions[1] + "\n");
Console.WriteLine(menuOptions[2] + "\n");
Console.WriteLine(menuOptions[3] + "\n");
Console.WriteLine(menuOptions[4] + "\n");
Console.WriteLine("-->" + menuOptions[5] + "\n");
Console.WriteLine(menuOptions[6] + "\n");
Console.WriteLine(menuOptions[7] + "\n");
}
else if (menuSelected == 6)
{
Console.WriteLine(menuOptions[0] + "\n");
Console.WriteLine(menuOptions[1] + "\n");
Console.WriteLine(menuOptions[2] + "\n");
Console.WriteLine(menuOptions[3] + "\n");
Console.WriteLine(menuOptions[4] + "\n");
Console.WriteLine(menuOptions[5] + "\n");
Console.WriteLine("-->" + menuOptions[6] + "\n");
Console.WriteLine(menuOptions[7] + "\n");
}
else if (menuSelected == 7)
{
Console.WriteLine(menuOptions[0] + "\n");
Console.WriteLine(menuOptions[1] + "\n");
Console.WriteLine(menuOptions[2] + "\n");
Console.WriteLine(menuOptions[3] + "\n");
Console.WriteLine(menuOptions[4] + "\n");
Console.WriteLine(menuOptions[5] + "\n");
Console.WriteLine(menuOptions[6] + "\n");
Console.WriteLine("-->" + menuOptions[7] + "\n");
}
var keyPressed = Console.ReadKey();
if (keyPressed.Key == ConsoleKey.DownArrow && menuSelected != menuOptions.Length -1)
{
menuSelected++;
}
else if (keyPressed.Key == ConsoleKey.UpArrow && menuSelected >= 1)
{
menuSelected--;
}
else if (keyPressed.Key == ConsoleKey.Enter)
{
switch (menuSelected)
{
case 0:
add_passenger();
break;
case 1:
print_buss();
break;
case 2:
calc_total_age();
break;
case 3:
FourthChoise();
break;
case 4:
max_age();
break;
case 5:
find_age();
break;
case 6:
sort_buss();
break;
case 7:
EighthChoise();
break;
}
}
}
}
public void add_passenger() //Method for menu choice 1
{
Console.Clear();
Console.CursorVisible = true;
Console.WriteLine("====================================== LÄGG TILL PASSAGERARE ===========================================\n");
Console.WriteLine("Här registreras nya passagerare.");
Console.WriteLine("O.B.S! Små barn som inte upptar en egen plats ska inte registreras.\n");
// Use Do-while loop and bool so user can try again if other than numbers was printed
bool loop = true;
do
{
Console.Write("Ange antal nya passagerare: ");
string strKliverPa = Console.ReadLine();
//Use try/catch to make sure user only print numbers
try
{
// Convert string to int
int kliverPa = Convert.ToInt32(strKliverPa);
// If statement to check so that new passengers can be accommodated on the bus
if (antal_passagerare + kliverPa > maxPassagerare)
{
Console.WriteLine("\nDet ryms bara 25 passagerare. Det finns just nu " + (maxPassagerare - antal_passagerare) + " lediga platser.");
if((maxPassagerare - antal_passagerare) == 0)
loop = false;
}
else if (kliverPa == 0)
{
Console.WriteLine("\nInga nya passagerare klev på.");
loop = false;
}
else
{
Console.WriteLine("\n{0} nya passagerare har klivit på bussen.",kliverPa);
antal_passagerare = antal_passagerare + kliverPa;
for (int i = 0; i < kliverPa; i++)
{
Console.Write("\nAnge person " + (i+1) + ":s ålder: ");
int age = Convert.ToInt32(Console.ReadLine());
if (age > 0)
{
for (int j = 0; j < passagerare.Length; j++)
{
if (passagerare[j] == 0)
{
passagerare[j] = age;
break;
}
}
loop = false;
}
else
{
Console.WriteLine("\nSå små barn behöver inte registreras. Barnet kommer inte att läggas till som passagerare.");
loop = false;
}
}
}
}
catch
{
Console.WriteLine("\nDu behöver ange värdet med siffror! Prova igen.");
}
} while (loop);
Console.WriteLine("\n\n\nTryck Enter för att gå tillbaka till menyn.");
Console.ReadKey();
Console.Clear();
}
public void print_buss() //Method for menu choice 2
{
Console.Clear();
Console.CursorVisible = true;
Console.WriteLine("==================================== SKRIV UT PASSAGERARLISTA ==========================================\n");
Console.WriteLine("Nedan visas antal passagerare i bussen och deras åldrar:\n");
Console.WriteLine("----------------------------------------------------");
if (antal_passagerare == 0)
{
Console.WriteLine("\nDet finns inga passagerare. \nGå tillbaka till menyn och välj menyval 1 för att lägga till passagerare.");
}
else
{
for (int i = 0; i < antal_passagerare; i++)
{
if(passagerare[i] > 0)
{
Console.WriteLine("Passagerare " + (i+1) + ": " + passagerare[i] + " år");
Console.WriteLine("----------------------------------------------------");
}
}
}
Console.WriteLine("\n\n\nTryck Enter för att gå tillbaka till menyn.");
Console.ReadKey();
Console.Clear();
}
public int calc_total_age() // Method for menu choice 3
{
Console.Clear();
Console.CursorVisible = true;
Console.WriteLine("================================= PASSAGERARNAS TOTALA ÅLDER =======================================\n");
int totalAge = 0; // Variable for total age
if (antal_passagerare == 0)
{
Console.WriteLine("\nDet finns inga passagerare. \nGå tillbaka till menyn och välj menyval 1 för att lägga till passagerare.");
}
else
{
// For loop to sum up the ages of the passengers
for (int i = 0; i < antal_passagerare; i++)
{
totalAge = totalAge + passagerare[i];
}
Console.WriteLine("Passagerarnas totala ålder är {0} år.", totalAge);
}
return totalAge;
Console.WriteLine("\n\n\nTryck Enter för att gå tillbaka till menyn.");
Console.ReadKey();
}
static void FourthChoise()
{
Console.Clear();
Console.WriteLine("\nFjärde Valet");
Console.WriteLine("Tryck Enter för att gå tillbaka till menyn.");
Console.ReadKey();
}
public void max_age()
{
Console.Clear();
Console.CursorVisible = true;
Console.WriteLine("====================================== ÄLDSTA PASSAGERAREN =======================================\n");
int oldest = 0;
if(antal_passagerare == 0)
{
Console.WriteLine("Det finns inga passagerare. \nGå tillbaka till menyn och välj menyval 1 för att lägga till passagerare.");
}
else
{
for (int i = 0; i < antal_passagerare; i++)
{
if (passagerare[i] > oldest)
{
oldest = passagerare[i];
}
}
Console.WriteLine("Den äldsta passageraren är {0} år.", oldest);
}
//return oldest??? BEHÖVER RETURVÄRDE? VAR SKA DET IN?
Console.WriteLine("\n\n\nTryck Enter för att gå tillbaka till menyn.");
Console.ReadKey();
}
public void find_age()
{
Console.Clear();
Console.WriteLine("\nSjätte Valet");
Console.WriteLine("Tryck Enter för att gå tillbaka till menyn.");
Console.ReadKey();
}
public void sort_buss()
{
Console.Clear();
Console.CursorVisible = true;
Console.WriteLine("==================================== ÅLDERSSORTERA PASSAGERARE =========================================\n");
if(antal_passagerare == 0)
{
Console.WriteLine("Det finns inga passagerare att sortera. \nGå tillbaka till menyn och välj menyval 1 för att lägga till passagerare.");
}
else
{
// Variable for needed number of loops to get array sorted
int max = antal_passagerare - 1;
for (int i = 0; i < max; i++)
{
int nrLeft = max - i;
for (int j = 0; j < nrLeft; j++)
{
if (passagerare[j] > passagerare[j+1])
{
// Switch place
int temp = passagerare[j];
passagerare[j] = passagerare[j+1];
passagerare[j+1] = temp;
}
}
}
//Print age sorted list
Console.WriteLine("\nHär är passagerarna sorterade i åldersordning, yngst till äldst:\n");
for (int i = 0; i < antal_passagerare; i++)
{
if (passagerare[i] > 0)
{
Console.Write(passagerare[i] + " | ");
}
}
}
Console.WriteLine("\n\n\nTryck Enter för att gå tillbaka till menyn.");
Console.ReadKey();
}
static void EighthChoise()
{
Console.Clear();
Console.WriteLine("\nDu har valt att avsluta programmet. ");
Console.WriteLine("Tryck Enter för att fortsätta.");
Console.ReadKey();
Environment.Exit(1);
}