5 svar
185 visningar
khahir 5
Postad: 26 apr 2023 20:25 Redigerad: 26 apr 2023 22:39

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.

Peter_ 470 – Avstängd
Postad: 26 apr 2023 20:28

Kan du precisera din fråga lite bättre?

khahir 5
Postad: 26 apr 2023 20:36

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

anders_k 237
Postad: 26 apr 2023 20:40
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

Fermatrix 7841 – Fd. Medlem
Postad: 27 apr 2023 02:06

En annan sak, varför har du med följande using i din kod?

using System.Reflection.Metadata.Ecma335;
using System.Security.Cryptography.X509Certificates;
Erlisch 3
Postad: 2 maj 2023 19:52

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

Svara
Close