Programmering 1 "Bussen" - Hjälp med array
Hej gott folk!
Jag läser för närvarande Programmering 1 på distans och hade glädjeligen tagit emot lite hjälp.
Problemmet som jag har fastnad på är i min funktion där jag skall lägga till passagerare. Det funkade fint för mig när jag enbart ber användaren att fylla i deras ålder, men, jag vill lära mig att kunna lagra mer information på varje index i min array. Som i detta fallet vill jag kunna lagra ålder, namn och kön.
I min nuvarande kod så skrivs namn och kön över varandra, alltså får alla index samma namn och kön.
Önskar inte få svaret serverat framför mig, utan vill bara få hjälp att tänka "rätt".
Tack på förhand!
Så här ser min kod ut för närvarande:
/*Hjälpkod för att komma igång
* Notera att båda klasserna är i samma fil för att det ska underlätta.
* Om programmet blir större bör man ha klasserna i separata filer såsom jag går genom i filmen
* Då kan det vara läge att ställa in startvärden som jag gjort.
* Man kan också skriva ut saker i konsollen i konstruktorn för att se att den "vaknar
* Denna kod hjälper mest om du siktar mot betyget E och C
* För högre betyg krävs mer självständigt arbete
*/
using System;
namespace Bussen
{
class Buss
{
const int buss_platser = 25;
public int passagerare = 0;
public int[] passagerare_ålder = new int[25];
Personinfo info = new Personinfo();
public string[] name = new string[25];
public void Run()
{
Console.WriteLine("Välkommen ombord på bussen!");
int meny;
do
{
Console.WriteLine("-----------------------------------------------------");
Console.WriteLine("Meny 1: Lägg till passagerare");
Console.WriteLine("Meny 2: Skriv ut lista på passagerare");
Console.WriteLine("Meny 3: Räkna ihop alla passagerares totalålder");
Console.WriteLine("Meny 4: Räkna ut medelåldern");
Console.WriteLine("Meny 5: Skriv ut den äldsta passagerarens ålder");
Console.WriteLine("Meny 6: Leta ålder");
Console.WriteLine("Meny 7: Sortera bussen efter ålder");
Console.WriteLine("Meny 8: Skriv ut kön på passagerare");
Console.WriteLine("Meny 9: Puffa en passagerare");
Console.WriteLine("Meny 10: Passagerare stiger av bussen");
Console.WriteLine("Meny 0: Avsluta programmet");
Console.Write("Välj nummer från menyn: ");
meny = int.Parse(Console.ReadLine());
Console.WriteLine("-----------------------------------------------------");
Console.WriteLine("Det sitter just nu " + passagerare + " passagerare ombord av max 25");
switch (meny)
{
case 1:
add_passenger();
break;
case 2:
print_buss();
break;
case 3:
calc_total_age();
break;
case 4:
calc_average_age();
break;
case 5:
max_age();
break;
case 6:
find_age();
break;
case 7:
sort_buss();
break;
case 8:
print_sex();
break;
case 9:
poke();
break;
case 10:
getting_off();
break;
case 0:
//avsluta
default:
Console.WriteLine("Fel! Skriv en siffra mellan 0-10");
break;
}
} while (meny != 0);
}
public void add_passenger()
{
Console.Write("Hur många passagerare vill du adda? ");
int svar = int.Parse(Console.ReadLine());
int nya_passagerare = Convert.ToInt32(svar);
if ((passagerare + nya_passagerare) > buss_platser)
{
Console.WriteLine("Tyvärr, bussen är full!");
return;
}
passagerare = passagerare + nya_passagerare;
for (int i = 0; i < nya_passagerare; i++)
{
for (int y = 0; y < passagerare_ålder.Length; y++)
{
if (passagerare_ålder[y] == 0)
{
Console.Write("Ange passagerar nr " + (i + 1) + "'s ålder: ");
svar = int.Parse(Console.ReadLine());
passagerare_ålder[y] = Convert.ToInt32(svar);
for (int u = 0; u < name.Length; u++)
{
Console.Write("Ange passagerar nr " + (i + 1) + "'s namn: ");
info.namn = Console.ReadLine();
break;
}
Console.Write("Ange passagerar nr " + (i + 1) + "'s kön (k/t): ");
info.sex = Convert.ToChar(Console.ReadLine());
break;
}
}
}
}
public void print_buss()
{
int pos = 1;
foreach (int platser in passagerare_ålder)
{
if (platser != 0)
{
Console.WriteLine($"Plats #{pos} - Namn: " + info.namn + " | Ålder: " + platser + " | Kön: " + info.sex);
pos++;
}
else
{
Console.WriteLine($"Plats #{pos}: Tom plats");
pos++;
}
}
}
public void calc_total_age()
{
int totalålder = 0;
Array.ForEach(passagerare_ålder, delegate (int i) { totalålder += i; });
Console.WriteLine("Den totala åldern på alla passagerare är " + totalålder + " år");
}
public void calc_average_age() //int
{
Console.WriteLine();
double medelålder = 0;
double sum = 0;
for (int i = 0; i < passagerare_ålder.Length; i++)
{
sum += passagerare_ålder[i];
}
for (int i = 0; i < passagerare_ålder.Length; i++)
{
}
medelålder = sum / passagerare;
Console.WriteLine($"Medelåldern ombord är {medelålder} år");
}
public void max_age() //int
{
int störst = passagerare_ålder[0];
for (int i = 0; i < passagerare_ålder.Length; i++)
{
if (passagerare_ålder[i] > störst)
{
störst = passagerare_ålder[i];
}
Console.WriteLine($"Äldsta passageraren är: {störst} år gammal");
break;
}
}
public void find_age()
{
//Visa alla positioner med passagerare med en viss ålder
//Man kan också söka efter åldersgränser - exempelvis 55 till 67
//Betyg C
//Beskrivs i läroboken på sidan 147 och framåt (kodexempel på sidan 149)
}
public void sort_buss()
{
//Sortera bussen efter ålder. Tänk på att du inte kan ha tomma positioner "mitt i" vektorn.
//Beskrivs i läroboken på sidan 147 och framåt (kodexempel på sidan 159)
//Man ska kunna sortera vektorn med bubble sort
}
//Metoder för betyget A
public void print_sex()
{
Console.Clear();
int pos = 1;
foreach (var utskrift in passagerare_ålder)
{
if (utskrift != 0)
{
Console.WriteLine($"Plats #{pos} {info.sex}");
}
else
{
break;
}
}
/*
int pos = 1;
foreach (var info in passagerare_ålder)
{
if (info != 0)
{
Console.WriteLine($"Plats #{pos} - Kön: " + info);
pos++;
}
else
{
Console.WriteLine($"Plats #{pos}: Tom plats");
pos++;
}
} */
//Betyg A
//Denna metod är nödvändigtvis inte svårare än andra metoder men kräver att man skapar en klass för passagerare.
//Skriv ut vilka positioner som har manliga respektive kvinnliga passagerare.
}
public void poke()
{
//Betyg A
//Vilken passagerare ska vi peta på?
//Denna metod är valfri om man vill skoja till det lite, men är också bra ur lärosynpunkt.
//Denna metod ska anropa en passagerares metod för hur de reagerar om man petar på dom (eng: poke)
//Som ni kan läsa i projektbeskrivningen så får detta beteende baseras på ålder och kön.
}
public void getting_off()
{
//Betyg A
//En passagerare kan stiga av
//Detta gör det svårare vid inmatning av nya passagerare (som sätter sig på första lediga plats)
//Sortering blir också klurigare
//Den mest lämpliga lösningen (men kanske inte mest realistisk) är att passagerare bakom den plats..
//.. som tillhörde den som lämnade bussen, får flytta fram en plats.
//Då finns aldrig någon tom plats mellan passagerare.
}
}
class Program
{
public static void Main(string[] args)
{
//Skapar ett objekt av klassen Buss som heter minbuss
//Denna del av koden kan upplevas väldigt förvirrande. Men i sådana fall är det bara att "skriva av".
var minbuss = new Buss();
minbuss.Run();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
Jag har även skapat en ny fil för klassen personinfo som ser ut så här:
using System;
using System.Collections.Generic;
using System.Text;
namespace Bussen
{
class Personinfo
{
public string namn { get; set; }
public char sex { get; set; }
public int ålder { get; set; }
public string[] passa_namn = new string[25];
}
}
I'm not a Goblin, I'm a Gnome and you just got Gnomed! ♥