Programmering 1 Buss system, errors
Hej!
Jag är en nybörjare i C# och sitter fast med en uppgift från Hermods som heter Bussen.
Den simulerar en buss med en kapacitet på 25 passagerare, vilket gör att användaren kan utföra olika åtgärder som att lägga till och ta bort passagerare, interagera med passagerare och avsluta programmet.
Har dock errors/fel på några rader och behöver hjälp med att lösa dom.
Det är på raderna: 181, 220, 235, 255 o 257 i koden. (CS0122)(CS0019)(CS0201)(CS0029)
Har verkligen försökt att lösa problemen själv, men det börjar bli jobbigare att finna lösningar...
using System;
namespace Bussen
{
class Program
{
static void Main(string[] args)
{
var minBuss = new Buss();// Skapar instans av klassen buss.
minBuss.Run();
Console.ReadKey(true);
}
}
class Buss //Ser till att namnet är dessamma till nästa class
{
public int total_passenger { get; set; }
Passenger[] passenger = new Passenger[25]; // skapar en privat array med namnet passenger med en fast storlek på 25 element/platser på bussen.
// Vid körning ska ett objekt bussen skapas och metoden Run ska köras.
public void Run()
{
Console.WriteLine("Welcome to the bus!");
int passenger = 0;
bool continueMenu = true;
int menu;
//Skriver ut menyalternativ och tar emot användarinput
while (continueMenu)
{
Console.WriteLine("\nPlease choose your category in the menu below.\n" +
"[1] Add Passenger\n" +
"[2] Remove Passenger\n" +
"[3] Passenger Interaction\n" +
"[4] Quit program");
ConsoleKeyInfo input = Console.ReadKey(true);
menu = int.Parse(input.KeyChar.ToString());// läser in tangenten som användaren trycker på
//Använder mig utav switch och case för att kategorisera varje kategori i menyn
switch (menu)
{
case 1:
Add_Passenger();
passenger++;
break;
case 2:
Remove_Passenger();
passenger--;
break;
case 3:
bool continueMenu2 = true;
while (continueMenu2)
{// mer fördjupad menu kategori om passagerare
Console.WriteLine("Passenger interaction");
Console.WriteLine("[5] Find passengers with specific age\n" + //find_age hitta specifikt ålder
"[6] Total age\n" + // Calc_total_age beräknar totala åldern sammalagt
"[7] Average age\n" + //calc_average_age Beräkna den genomsnittliga åldern.
"[8] Max age\n" + // // Max_age Ta fram den passagerare med högst ålder.
"[9] Sort bus by age\n" + //Sort_age sortera ålder i grupper
"[10] Poke\n" + // Poke välj specifik person
"[11] Current genders\n" + // Print_sex beräknar hur många från varje kön
"[12] Print bus\n" + // skriver ut alla passagerares värden
"[13] Return to main menu");
ConsoleKeyInfo menu2 = Console.ReadKey(true);
int menu2Choice = int.Parse(menu2.KeyChar.ToString());
switch (menu2Choice)
{
case 5:
Console.WriteLine("Find passengers with specific age");
find_age();
break;
case 6:
Console.WriteLine("Total age");
calc_total_age();
break;
case 7:
Console.WriteLine("Average age");
calc_average_age();
break;
case 8:
Console.WriteLine("Max age");
max_age();
break;
case 9:
Console.WriteLine("Sort bus by age");
sort_age();
break;
case 10:
Console.WriteLine("Poke");
poke();
break;
case 11:
Console.WriteLine("Current genders");
print_sex();
break;
case 12:
Console.WriteLine("Print bus");
print_buss();
break;
case 13:
Console.WriteLine("Return to main menu");
continueMenu2 = false;
break;
default:
Console.WriteLine("Incorrect input");
break;
}
}
break;
case 4:
continueMenu = false;
break;
default:
Console.WriteLine("Incorrect input");
break;
}
}
}
public void Add_Passenger()
{
Console.WriteLine("Add passenger\n");
Console.WriteLine("How many passengers do you want to add?");
int size = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < size; i++)
{
Console.WriteLine("Enter the name of passenger " + (i + 1));
string find_name = Console.ReadLine();
Console.WriteLine("Enter age of passenger " + (i + 1));
bool validAge = false;
int find_age = 0;
while (!validAge) // är en loop som kommer att fortsätta att köras så länge variabeln validAge är falsk.
{
try
{
find_age = Convert.ToInt32(Console.ReadLine());
validAge = true;
}
catch (FormatException)
{
Console.WriteLine("Invalid input format. Please enter a valid age.");
}
}
Console.WriteLine("Enter gender of passenger " + (i + 1) + " (F/M)");
bool validGender = false;
char find_gender = ' ';
while (!validGender) // Loopar tills användaren har angett en korrekt kön
{
try
{
find_gender = char.Parse(Console.ReadLine());
if (find_gender == 'F' || find_gender == 'M')
{
validGender = true;
}
else
{
Console.WriteLine("Invalid input. Please enter 'F' or 'M'.");
}
}
catch (FormatException)
{
Console.WriteLine("Invalid input format. Please enter 'F' or 'M'.");
}
}
// Lägger till passageraren till arrayen
passenger[i] = new Passenger { Name = find_name, Age = find_age, Gender = find_gender };
Console.WriteLine("Passenger added successfully!\n");
}
}
public void Remove_Passenger()
{
Console.WriteLine("Remove passenger\n");
Console.WriteLine("Enter name of the passenger you want to remove:");
string nameToRemove = Console.ReadLine();
Console.WriteLine("Enter age of the passenger you want to remove:");
int ageToRemove = int.Parse(Console.ReadLine());
bool passengerFound = false;
for (int i = 0; i < passenger.Length; i++)
{
if (passenger[i] != null && passenger[i].Name == nameToRemove && passenger[i].Age == ageToRemove)
{
passenger[i] = null;
passengerFound = true;
Console.WriteLine($"Passenger {nameToRemove} ({ageToRemove} years old) has been removed from the bus.");
break;
}
}
if (!passengerFound)
{
Console.WriteLine($"Could not find passenger with name {nameToRemove} and age {ageToRemove} on the bus.");
}
}
// metoder som jag behöver dubbelkolla igenom och testa
public int find_age()
{
Console.WriteLine("Find passengers with specific age");
Console.WriteLine("Enter the age to search for:");
int searchAge = Convert.ToInt32(Console.ReadLine());
int count = 0;
for (int i = 0; i < passenger.Length; i++)
{
if (passenger[i] == searchAge)
{
count++;
}
}
Console.WriteLine("Found " + count + " passengers with age " + searchAge);
return count;
}
public int calc_total_age()
{
Console.WriteLine("Total age");
int totalAge = 0; // skapar variabel som bräknar summan för calc_total_age
for (int i = 0; i < passenger.Length; i++)
{
(totalAge += passenger[i]);
}
Console.WriteLine("The total age of all passengers is " + totalAge);
return totalAge;
}
public void calc_average_age()
{
Console.WriteLine("Average age");
int totalAge = calc_total_age(); // skapar variabel som bräknar summan för calc_average_age
double averageAge = (double)totalAge / passenger.Length;
Console.WriteLine("The average age of all passengers is " + averageAge);
}
public int max_age()
{
Console.WriteLine("Max age");
int maxAge = 0; // skapar variabel som bräknar summan för calc_total_age
for (int i = 0; i < passenger.Length; i++)
{
if (passenger[i] > maxAge)
{
maxAge = passenger[i];
}
}
Console.WriteLine("The maximum age of all passengers is " + maxAge);
return maxAge;
}
public int sort_age()
{
Console.WriteLine("Sort bus by age");
Array.Sort(passenger);
Console.WriteLine("The passengers have been sorted by age.");
return 0;
}
public void poke()
{
Console.WriteLine("Poke");
Console.WriteLine("Enter the index of the passenger to poke (0-" + (passenger.Length - 1) + "):");
int index = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("The passenger at index " + index + " has been poked.");
}
public void print_buss()
{
Console.WriteLine("Enter number of passengers to print (1-25):");
int size = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("The age of all passengers is:");
for (int i = 0; i < size; i++)
{
Console.WriteLine("Passenger " + (i + 1) + ": " + passenger[i] + " years old");
}
}
public void print_sex()
{
Console.WriteLine("Current genders");
int numMales = 0;
int numFemales = 0;
for (int i = 0; i < passenger.Length; i++)
{
Console.WriteLine("Enter the gender of passenger #" + (i + 1) + " (M/F):");
ConsoleKeyInfo input = Console.ReadKey(true);
if (input.KeyChar == 'M' || input.KeyChar == 'm')
{
numMales++;
}
else if (input.KeyChar == 'F' || input.KeyChar == 'f')
{
numFemales++;
}
}
Console.WriteLine("There are " + numMales + " males and " + numFemales + " females on the bus.");
} }
}
class Passenger
{
private string name = "";
private int age = 0;
private enum Gender
{
Male = 'M',
Female = 'F',
};
public string Name
{
get { return name; }
set { name = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
}
Det finns inga radnummer.
För att lösa felen tar du ett fel i taget.
Hur ser raden ut som har det första felet?
passenger[i] = new Passenger { Name = find_name, Age = find_age, Gender = find_gender };
Där är det 'Gender' som är fel:
"Error CS0122: 'Passenger.Gender' is inaccessible due to its protection level (CS0122) (Bussen)"
Jag tänker att jag skriver ut de andra också:
Rad 220
if (passenger[i] == searchAge)
Error CS0019: Operator '==' cannot be applied to operands of type 'Passenger' and 'int' (CS0019) (Bussen)
Rad 235
(totalAge += passenger[i]);
Error CS0019: Operator '+=' cannot be applied to operands of type 'int' and 'Passenger' (CS0019) (Bussen)
Error CS0201: Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement (CS0201) (Bussen)
Rad 255, 257
if (passenger[i] > maxAge)
{
maxAge = passenger[i];
}
Error CS0019: Operator '>' cannot be applied to operands of type 'Passenger' and 'int' (CS0019) (Bussen)
Error CS0029: Cannot implicitly convert type 'Passenger' to 'int' (CS0029) (Bussen)
Är det du som har skrivit programmet i dess nuvarande form?
Det är fundamentala fel i koden som kräver omskrivning.
Jag tog inspiration från många olika koder och försökte sätta ihop min egen. Men jag förstår fullkomlig om jag behöver slänga detta.
Ja, koden har många fel som till exempel: Error CS0029: Cannot implicitly convert type 'Passenger' to 'int'
A precis 3 st, jag undrar om de va så att metoderna var relaterade till endast ett problem pga det.
class Passenger kan inte tilldelas eller jämföras med ett heltal.
Du behöver skriva om koden.
Ok, Bara så att jag tolkar rätt: "Du behöver skriva om koden." syftar du på endast class Passenger eller bara hela generella koden?
Allting!
Vad är det du vill åstadkomma egentligen?
Ett buss system som har en kapacitet på 25 passagerare, vilket gör att användaren kan utföra olika åtgärder som att lägga till och ta bort passagerare, interagera med passagerare och avsluta programmet.
Karvet är att man ska:
- lägga ytterligare till en klass som heter class Passenger
- en massa funktioner via menu1 menu2 (finns lite kommentarer på vad kategorierna ska göra)
- lagra passagerarnas namn, ålder och kön
Tack för att du försökte
Så class Passenger är en passagerare med alla attribut, inte flera?
Märklig uppgift. Jag skulle lösa det med en databas men det är troligen något ni inte lärt er redan.
Jag redigerade nu lite efter i koden och det löste sig till sist. Bara många bitar att ta bort och göra om :)