3 svar
125 visningar
IdaKar behöver inte mer hjälp
IdaKar 2
Postad: 6 mar 08:54

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); 
  }

 }
sictransit 1072 – Livehjälpare
Postad: 6 mar 09:17 Redigerad: 6 mar 09:20

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]);
}
IdaKar 2
Postad: 6 mar 10:14
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 du Console.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.

Svara
Close