Som alla andra har jag problem med uppgiften bussen. find_age() vill inte funka fattar inte vad som är fel
using System;
using System.Reflection.Metadata.Ecma335;
using System.Security.Cryptography.X509Certificates;
namespace Bussen
{
class Buss
{
public int[] passagerare = new int[25];
public int antal_passagerare;
public void Run()
{
Console.WriteLine("************************************");
Console.WriteLine("Välkommen till Bussen");
Console.WriteLine("************************************");
Thread.Sleep(500);
string[] menyval = new string[]{"Lägg till passagerare", "skriv ut alla passagerare ", "Räkna ut total ålder ", "Räkna ut medelålder", "Visa den äldsta", "Sök Bland åldrar", "Avsluta programmet"};
int menuSelected = 0;
while (true)
{
Console.Clear();
Console.CursorVisible = false;
// detta utgör menyn
if (menuSelected == 0)
{
// \t gör ett Tab hopp framåt alltså flyttar den meningen ett snäpp framåt
Console.WriteLine("\t" + menyval[0] + ("\t\t<---"));
Console.WriteLine(menyval[1]);
Console.WriteLine(menyval[2]);
Console.WriteLine(menyval[3]);
Console.WriteLine(menyval[4]);
Console.WriteLine(menyval[5]);
Console.WriteLine(menyval[6]);
}
else if (menuSelected == 1)
{
Console.WriteLine(menyval[0]);
Console.WriteLine("\t" + menyval[1] + ("\t<---"));
Console.WriteLine(menyval[2]);
Console.WriteLine(menyval[3]);
Console.WriteLine(menyval[4]);
Console.WriteLine(menyval[5]);
Console.WriteLine(menyval[6]);
}
else if (menuSelected == 2)
{
Console.WriteLine(menyval[0]);
Console.WriteLine(menyval[1]);
Console.WriteLine("\t" + menyval[2] + ("\t\t<---"));
Console.WriteLine(menyval[3]);
Console.WriteLine(menyval[4]);
Console.WriteLine(menyval[5]);
Console.WriteLine(menyval[6]);
}
else if (menuSelected == 3)
{
Console.WriteLine(menyval[0]);
Console.WriteLine(menyval[1]);
Console.WriteLine(menyval[2]);
Console.WriteLine("\t" + menyval[3] + ("\t\t<---"));
Console.WriteLine(menyval[4]);
Console.WriteLine(menyval[5]);
Console.WriteLine(menyval[6]);
}
else if (menuSelected == 4)
{
Console.WriteLine(menyval[0]);
Console.WriteLine(menyval[1]);
Console.WriteLine(menyval[2]);
Console.WriteLine(menyval[3]);
Console.WriteLine("\t" + menyval[4] + ("\t\t<---"));
Console.WriteLine(menyval[5]);
Console.WriteLine(menyval[6]);
}
else if (menuSelected == 5)
{
Console.WriteLine(menyval[0]);
Console.WriteLine(menyval[1]);
Console.WriteLine(menyval[2]);
Console.WriteLine(menyval[3]);
Console.WriteLine(menyval[4]);
Console.WriteLine("\t" + menyval[5] + ("\t\t<---"));
Console.WriteLine(menyval[6]);
}
else if (menuSelected == 6)
{
Console.WriteLine(menyval[0]);
Console.WriteLine(menyval[1]);
Console.WriteLine(menyval[2]);
Console.WriteLine(menyval[3]);
Console.WriteLine(menyval[4]);
Console.WriteLine(menyval[5]);
Console.WriteLine("\t" + menyval[6] + ("\t\t<---"));
}
var keyPressed = Console.ReadKey();
if (keyPressed.Key == ConsoleKey.DownArrow && menuSelected != menyval.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:
calc_average_age();
break;
case 4:
max_age();
break;
case 5:
find_age();
break;
case 6:
exit();
break;
default:
break;
}
}
}
}
public void add_passenger()
{
Console.Clear();
Console.WriteLine("Hur många passagerare vill du lägga till?");
try //En fel hantering så att programet inte ska krascha ifall användaren skriver något annat än siffor
{
antal_passagerare = Convert.ToInt32(Console.ReadLine()); // en variabel som håller mängden passagerare
for (int i = 0; i < antal_passagerare; i++)
{
if (antal_passagerare > 25) // om användaren skriver att den vill ha mer än 25 passagerare så kommer programmet att återgå til menyn
{
Console.WriteLine("det finns bara 25 plaster");
Console.ReadKey();
break;
}
else // annars kommer programmet fråga vilken ålder passagerarna har
{
Console.WriteLine("hur gammla är dessa passagerare? ");
int Alder = Convert.ToInt32(Console.ReadLine()); // en variabel som lagrar åldern på alla passagerare
Alder = passagerare[i]; // skikcar sedan värdet per ålder in i vektorn.
}
}
}
catch
{
Console.WriteLine("För att lägga till en passagerare behöver du skriva in åldern med siffror!"); // detta kommer stå om användaren skriver något annat än siffror
Console.ReadKey();
}
}
public void print_buss()
{
for (int i = 0; i < antal_passagerare; i++) // här kör loopen så många gånger som vi har valt mängd passagerare.
{
Console.WriteLine(passagerare[i]); // skriver ut passagerare
}
Console.ReadKey();
}
public int calc_total_age()
{
Console.Clear();
int total_age = 0;
for (int i = 0; i < antal_passagerare; i++)
total_age = total_age + passagerare[i];
Console.WriteLine("Den totala åldern på Passagerarna är ");
Console.Write(total_age + "År <--- ");
Console.ReadKey();
return total_age;
}
public void calc_average_age()
{
int avrage_age = 0;
for (int i = 0; i < antal_passagerare; i++)
avrage_age += passagerare[i];
double avrage = Convert.ToDouble(avrage_age);
double avrage1 = avrage / antal_passagerare;
Console.WriteLine("D" + "en totala åldern på Passagerarna är ");
Console.Write(avrage1 + "År <--- ");
Console.ReadKey();
}
public void max_age()
{
int maxAge = 0;
maxAge = passagerare[0];
for (int i = 0; i < antal_passagerare; i++)
if (passagerare[i] > maxAge)
{
maxAge = passagerare[i];
}
Console.WriteLine(maxAge);
Console.ReadKey();
}
public void find_age()
{
Console.WriteLine("Ange den lägsta åldern du vill söka med");
int låg_ålder = int.Parse(Console.ReadLine());
Console.WriteLine("Ange den högsta åldern du vill söka med");
int hög_ålder = int.Parse(Console.ReadLine());
Console.WriteLine("Passagerare mellan " + låg_ålder + " och " + hög_ålder + " sitter på plats: ");
for (int i = 0; i < antal_passagerare;)
{
if (passagerare[i] >= låg_ålder && passagerare[i] <= hög_ålder)
{
Console.WriteLine("plats " + i);
}
}
}
public void exit()
{
Environment.Exit(0);
}
}
class Program
{
public static void Main(string[] args)
{
var minbuss = new Buss();
minbuss.Run();
Console.Write("Tryck på en tangent för att fortsätta . . . ");
Console.ReadKey(true);
}
}
}
Kod indenterad /Dracaena.
Kan du precisera din fråga lite bättre?
Jag har försökt med olika slags kod som står i boken och som finns på nätet. men inget tycks funka.
men i metoden find_age(); ska man kunna söka mellan lägsta o högsta värde. o får alla värden där emellan men oavsett vad jag testat så hoppar koden tillbaka till pilmenyn jag skapat. eller så får jag ingen respons alls
int Alder = Convert.ToInt32(Console.ReadLine());// en variabel som lagrar åldern på alla passagerare
Alder = passagerare[i];// skikcar sedan värdet per ålder in i vektorn.
Det där ser inte rätt ut, du menade säkert:
int Alder = Convert.ToInt32(Console.ReadLine());
passagerare[i]=Alder;
Om du istället för ToInt32 använder Int32.TryParse(...) så slipper du hantera exception
En annan sak, varför har du med följande using i din kod?
using System.Reflection.Metadata.Ecma335;
using System.Security.Cryptography.X509Certificates;
I find_age() verkar det fattas något i for-loops definitionen.
I add_passanger() skulle jag rekommendera att flytta ut if-satsen till innan for-loopen för att göra det lite simplare