Anropa metod i Switch case-meny C#
Hej! Jag är nybörjare, läser programmering 1 och har suttit med det här problemet i tre dagar och börjar förlora för mycket tid på det nu. Har frågat de i min omgivning som är duktiga på programmering men ingen kan hitta felet. Innan jag ger upp och hittar en enklare lösning vill jag gärna kolla här.
Problem: I min switch case är det bara case 0 och 3 som kan anropas, väljer man 1 eller 2 händer ingenting. Nu har jag gjort en meny som styrs med piltangenterna men om jag gör en där användaren istället får mata in en siffra så fungerar allt som det ska. Är bara så envis så har svårt att släppa det här innan jag löst det alternativt fått en förklaring varför det inte går. Kan någon här se problemet?
using System;
class Program //Klass för programmet
{
public static void Main(string[] args)
{
//Skapar ett objekt av klassen Buss som heter minbuss
var minbuss = new Buss();
minbuss.Run();
Console.Write("Press any key to continue . . . ");
Console.ReadKey();
}
}
//Klass för Bussen
class Buss {
public int[] passagerare = new int[25];
public int antalPassagerare = 0;
public int maxPassagerare = 25;
public int menuSelect = 0;
//Metod för menyn
public void Run() {
string[] menuOptions = new string[] {"Addera passagerare", "Kontrollera passagerare", "Beräkna total ålder", "Avsluta"}; //vektor med menyval
do
{
//Rensar och snyggar till menyn lite
Console.Clear();
Console.CursorVisible = false;
//Skriver ut menyn
if (menuSelect == 0) {
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(menuOptions[0]);
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine(menuOptions[1]);
Console.WriteLine(menuOptions[2]);
Console.WriteLine(menuOptions[3]);
}
else if (menuSelect == 1) {
Console.WriteLine(menuOptions[0]);
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(menuOptions[1]);
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine(menuOptions[2]);
Console.WriteLine(menuOptions[3]);
}
else if (menuSelect == 2) {
Console.WriteLine(menuOptions[0]);
Console.WriteLine(menuOptions[1]);
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(menuOptions[2]);
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine(menuOptions[3]);
}
else if (menuSelect == 3) {
Console.WriteLine(menuOptions[0]);
Console.WriteLine(menuOptions[1]);
Console.WriteLine(menuOptions[2]);
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(menuOptions[3]);
}
//Fångar upp användarens val
var keyPressed = Console.ReadKey();
//Om användaren trycker på pil ner och inte är i sista menyval
if (keyPressed.Key == ConsoleKey.DownArrow && menuSelect != menuOptions.Length -1)
{
menuSelect++;
}
//Om användaren trycker på pil upp och inte är i första menyval
else if (keyPressed.Key == ConsoleKey.UpArrow && menuSelect >= 1)
{
menuSelect--;
}
//Om användaren trycker enter
if (keyPressed.Key == ConsoleKey.Enter) {
switch (menuSelect){
case 0:
adderaPassagerare();
break;
case 1:
utskriftPassagerare();
break;
case 2:
totalÅlder();
break;
case 3:
avsluta();
break;
}
}
} while (true);
}
//Lägg till ny passagerare
public void adderaPassagerare()
{
Console.WriteLine("\nHur många passagerare vill du lägga till? ");
int antal = 0;
//Fångar upp fel i användarens input
try
{
//Användaren skriver in antal passagerare
antal = int.Parse(Console.ReadLine());
}
catch
{
//Felmeddelande vid fel input
Console.WriteLine("Vänligen ange ett heltal, försök igen.");
Console.WriteLine(" ");
}
//Om antal passagerare är större än max antal passagerare
if (antalPassagerare + antal > maxPassagerare)
{
int platserKvar = maxPassagerare - antalPassagerare;
Console.WriteLine($"Det finns inte plats för så många passagerare, bussen rymmer 25st passagerare totalt, nu finns det {platserKvar} lediga platser kvar. ");
return;
}
//Om bussen är full kan inte någon passagerare stiga på
else if (antalPassagerare == maxPassagerare)
{
Console.WriteLine("Bussen är fullsatt.");
return;
}
//Lägger till passagerare
for (int i = 0; i < antal; i++)
{
Console.Write($"Du har valt att lägga till en passagerare, skriv in åldern för passageraren: ");
//Fångar upp fel i användarens input
try
{
passagerare[antalPassagerare] = int.Parse(Console.ReadLine());
antalPassagerare++;
}
//Felmeddelande vid fel input
catch
{
Console.WriteLine("Vänligen ange ett heltal, försök igen.");
i--; // Hoppar tillbaka ett steg i indexposition.
}
}
}
//Skriv ut alla passagerare
public void utskriftPassagerare()
{
for (int i = 0; i < antalPassagerare; i++)
{
int bussplats = i + 1; // Deklarerar variabel för nummer på bussplats
string biljettTyp = "";// Deklarerar variabel för biljettyp
if (passagerare[i] <= 20)
{
biljettTyp = "Barn & ungdomsbiljett.";
}
else
{
biljettTyp = "Vuxenbiljett.";
}
Console.WriteLine($"Passageraren på bussplats {bussplats} är {passagerare[i]} år gammal. Passageraren har åkt på: {biljettTyp}");
}
Console.WriteLine("Här är alla passagerare på bussen: " + antalPassagerare);
if (antalPassagerare == 0)
{
Console.WriteLine("Bussen är tom.");
}
}
public void totalÅlder()
{
int sum = 0;
for (int i = 0; i < antalPassagerare; i++)
{
sum += passagerare[i];
}
Console.WriteLine($"\nSammanlagda åldern för alla passagerare är {sum}");
if (antalPassagerare == 0)
{
Console.WriteLine("Bussen är tom.");
}
}
public void avsluta() {
Console.Clear();
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Programmet har avslutats!");
Console.ReadKey();
Environment.Exit(1);
}
}
Hej och välkommen!
Visst händer något! Du skriver ut passagerarna eller beräknar total ålder ...
... och omedelbart efteråt kör du Console.Clear()
som rensar allt innan du skriver ut menyn igen.
Som en liten bonus, om du vill bli av med några rader kod, kan du skriva ut menyn i en loop istället:
for (int menuIndex = 0; menuIndex < menuOptions.Length; menuIndex++)
{
if (menuIndex == menuSelect)
{
Console.ForegroundColor = ConsoleColor.Blue;
}
else
{
Console.ForegroundColor = ConsoleColor.White;
}
Console.WriteLine(menuOptions[menuIndex]);
}
sictransit skrev:Hej och välkommen!
Visst händer något! Du skriver ut passagerarna eller beräknar total ålder ...
... och omedelbart efteråt kör duConsole.Clear()
som rensar allt innan du skriver ut menyn igen.
Åh tack så jättemycket, nu fungerar allt som det ska! Det där med menyn löste också mitt problem med att all text blev blå ibland.