Permalänk

Hjälp med c# projekt

Har suttit nu i två dagar och försökt klura ut vad det är som är fel men hittar inte det.

felet är vid Print_buss då det blir helt fel svar från programmet.

sen fattar jag inte kommentaren på calc_total_age

Tack i förhand!!

using System; namespace Bussen { class Buss { public int[] passagerare = new int[25]; public int antal_passagerare = 0; int platser; public void Run() { int menu = 0; do { Console.WriteLine("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"); Console.WriteLine("Välkommen! Välj ett alternativ"); Console.WriteLine("1. Lägg till passagerare"); Console.WriteLine("2. Få reda på passagerarnas ålder"); Console.WriteLine("3. Passagerarnas ålder sammalags"); Console.WriteLine("4. Avsluta program"); Console.WriteLine("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"); menu = int.Parse(Console.ReadLine()); switch (menu) { case 1: add_passenger(); break; case 2: print_buss(); break; case 3: calc_total_age(); break; case 4: Console.WriteLine("Programmet avslutas"); break; default: Console.WriteLine("Fel inmatat. skriv in en siffra mellan 1-4"); break; } } while (menu != 0); } public void add_passenger() { if (antal_passagerare == 25) { Console.WriteLine("Bussen är tyvärr full"); } Console.Write("Hur många passagerare vill du lägga till: "); string answer = Console.ReadLine(); antal_passagerare = Convert.ToInt32(answer); for (int i = 0; i < antal_passagerare; i++) { Console.Write("Ange passagerar " + i + " s ålder: "); string answer1 = Console.ReadLine(); int yearsold = Convert.ToInt32(answer1); } int kvar = passagerare.Length - antal_passagerare; Console.WriteLine("Det finns " + kvar + " platser kvar i bussen"); } public void print_buss() { foreach (int platser in passagerare) { if (platser != null) { Console.WriteLine(platser); } else { Console.WriteLine("Tom plats");1 } } } private int calc_total_age() { //Beräkna den totala åldern. //För att koden ska fungera att köra så måste denna metod justeras, alternativt att man temporärt sätter metoden med void } } 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); } } }

Permalänk

Vill inte skriva hela svaret.

Har kompilerat ditt program utan några felmeddelanden.

Är lite osäker på vad du vill åstadkomma i vissa funktioner.

#1
Du hade ett fel i print_buss funktionen. Underlättade den och skrev en kommentar hur den fungerar.

public void print_buss() { // Foreach loopen itererar alla värden i arrayen "passagerare" och sparar värdet i locala variabeln "plats" för varje iteration. foreach (int plats in passagerare) { Console.WriteLine(plats); } }

#2
Du hade även ett fel med functionen calc_total_age() som ändra till void tillfälligt.

private void calc_total_age() { //Beräkna den totala åldern. //För att koden ska fungera att köra så måste denna metod justeras, alternativt att man temporärt sätter metoden med void }

#3
Namngivning på variabler underlättar. Använd ett bra namn som representerar det du använder den till. T.ex.

int[] passagerare_age = new int[25]; // Array för passagerarnas ålder const int BUSS_PLATSER = 25; // Maximalt antal platser i bussen (konstant variabel som oftast skrivs med stora bokstäver)

Visa signatur

Speldator: [Intel Core i7 4790K] [ASUS Matrix GTX 780Ti x2] [ASUS MAXIMUS VII HERO] [Corsair Dominator Platinum 32GB] [Windows 7] [Logitech G400S] [Microsoft Ergonomic 4000] [BenQ XR3501 35" (HDMI)] [BenQ G900W 19" (VGA)]

Serverdator: [Intel Core i7 6850K] [ASUS X99-E WS] [Corsair Vengeance LPX 64GB] [2x Crucial MX300 1TB] [Cooler Master V1200] [CentOS 7]

Permalänk

@Dalslandan: Aa, tänkte skriva ditt kommentarer senare.

Men print_buss blir helt fel
http://prntscr.com/oa5gb3

Permalänk
Medlem

Tycker du ska börja med att se till att add_passenger() blir korrekt först. Sedan kan du gå vidare till nästa del i programmet.

Permalänk

@ToddTheOdd: Vad är det i add_passenger som inte är korrekt då?

Permalänk

Har uppdaterat ditt program. Snälla ta dig tid att läsa kommentarerna!
Det viktigt att du förstår varför det fungerar.

Om jag hade valt hade jag inte skrivit det på detta sättet, utan jag hade använt en container som t.ex list eller någon struct.

Det jag har gjort är att löst din add_passenger() funktion. Samt att jag uppdaterat lite variabel namn bättre.
Något jag inte gillar dock är att blanda svenska och engelska i variabel namn.

using System; namespace Bussen { class Buss { const int BUSS_PLATSER = 25; // Maximalt platser i bussen public int passagerare = 0; // Nuvarande passagerare i bussen public int[] passagerare_age = new int[BUSS_PLATSER]; // Array för alla passagerares ålder public void Run() { int menu = 0; do { Console.WriteLine("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"); Console.WriteLine("Välkommen! Välj ett alternativ"); Console.WriteLine("1. Lägg till passagerare"); Console.WriteLine("2. Få reda på passagerarnas ålder"); Console.WriteLine("3. Passagerarnas ålder sammalags"); Console.WriteLine("4. Avsluta program"); Console.WriteLine("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"); Console.Write("Input: "); menu = int.Parse(Console.ReadLine()); switch (menu) { case 1: add_passenger(); break; case 2: print_buss(); break; case 3: calc_total_age(); break; case 4: Console.WriteLine("Programmet avslutas"); break; default: Console.WriteLine("Fel inmatat. skriv in en siffra mellan 1-4"); break; } } while (menu != 0); } public void add_passenger() { Console.Write("Hur många passagerare vill du lägga till: "); string answer = Console.ReadLine(); // Nya passagerare i funktionen int nya_passagerare = Convert.ToInt32(answer); // Kolla så att nya och gammla passagerare får plats i bussen if ((passagerare + nya_passagerare) > BUSS_PLATSER) { Console.WriteLine("Du kan inte lägga till så många passagerare!"); return; // Avsluta funktionen i förväg } // Alla får plats i bussen som vi lägger till dom till klassens variabel passagerare = passagerare + nya_passagerare; // Iterera antalet nya passagerare for (int y = 0; y < nya_passagerare; y++) { // Iterera arrayen passagerare_age for (int i = 0; i < passagerare_age.Length; i++) { // Eftersom vi använder en array, så sparar vi platsen i arrayen där åldern är 0 // Varför? Eftersom default value är 0, som då vet vi att man inte överskriver tidigare värde. if (passagerare_age[i] == 0) { Console.Write("Ange passagerar " + (y + 1) + " s ålder: "); answer = Console.ReadLine(); passagerare_age[i] = Convert.ToInt32(answer); break; // Avluta pågående for-loop } } } } public void print_buss() { // Foreach loopen itererar alla värden i arrayen "passagerare" och sparar värdet i locala variabeln "plats" för varje iteration. foreach (int plats in passagerare_age) { Console.WriteLine(plats); } } private void calc_total_age() { //Beräkna den totala åldern. //För att koden ska fungera att köra så måste denna metod justeras, alternativt att man temporärt sätter metoden med void } } 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); } } }

Visa signatur

Speldator: [Intel Core i7 4790K] [ASUS Matrix GTX 780Ti x2] [ASUS MAXIMUS VII HERO] [Corsair Dominator Platinum 32GB] [Windows 7] [Logitech G400S] [Microsoft Ergonomic 4000] [BenQ XR3501 35" (HDMI)] [BenQ G900W 19" (VGA)]

Serverdator: [Intel Core i7 6850K] [ASUS X99-E WS] [Corsair Vengeance LPX 64GB] [2x Crucial MX300 1TB] [Cooler Master V1200] [CentOS 7]

Permalänk
Medlem
Skrivet av fluffycrystal:

Men print_buss blir helt fel
http://prntscr.com/oa5gb3

En int i C# kan inte vara null, eftersom int är en s.k. value type. Och alla element i en array initialiseras till typens standardvärde, vilket för int är 0.

Det är alltså därför som din if-sats som jämför varje element med null inte gör någonting, och varför du får ut en massa nollor när du skriver ut arrayen. Tanken är att du ska använda antal_passagerare-variabeln för att hålla koll på hur många element i arrayen som du tilldelat ett värde, d.v.s. hur många passagerare arrayen innehåller. I din nuvarande kod använder du istället den variabeln för att spara antalet passagerare som ska läggas till.

Permalänk

@Dalslandan: Ohh tack! Men fattar du vad man ska göra på calc_total_age?
alltså denna kommentaren läraren har skrivit i kodningen

Permalänk

@perost: Tack så mycket. Bra förklarat!

Läser detta på distans och märkt att det inte är något för mig då jag lär mig via att diskutera saker och ting

Permalänk
Medlem
Skrivet av fluffycrystal:

@Dalslandan: Ohh tack! Men fattar du vad man ska göra på calc_total_age?
alltså denna kommentaren läraren har skrivit i kodningen

Min gissning är att ni fått koden (fast utan kod ). Dvs metoder och sådant fast ni behöver fylla i vad faktiskt metoderna ska göra.

Om metoden inte skulle vara void utan istället int (returvärdet dvs) så kommer inte er kod att fungera eftersom koden ej returnerar något innan du skrivit något.

Om en metod har returvärdet void (exempel: public void CalculateTotalAge()) så behöver metoden ej returnera något. Den kan alltså vara tom och fungera.

Men gissningsvis ska metoden egentligen heta public int CalculateTotalAge() och om den då är tom så får du ett error-meddelande som säger att din metod inte returnerar något. Därav kan man sätta den till void om man vill att programmet ska kompilera (innan man skrivit dit någon kod dvs).

Hoppas du förstod vad jag menade. Känns som jag svamlar lite men hoppas poängen ändå gick fram! =D

public void CalculateTotalAge() { // Denna metod fungerar eftersom den inte behöver returnera något. } public int CalculateTotalAge() { // Denna matod fungerar ej eftersom den behöver returnera en int. } public int CalculateTotalAge() { return -1; // Denna fungerar nu gentemot den översta eftersom den nu returnerar en int som angetts. }

Permalänk
Skrivet av fluffycrystal:

@Dalslandan: Ohh tack! Men fattar du vad man ska göra på calc_total_age?
alltså denna kommentaren läraren har skrivit i kodningen

//Beräkna den totala åldern.

Som jag förstått är det den sammanlagda åldern man är ute efter.
Lite konstig funktion enligt mig. Men här är ett exempel:

private void calc_total_age() { int simon = 18; // Passagerare 1 int robert = 22; // Passagerare 2 int totala_åldern = simon + robert; Console.WriteLine("Totala åldern är " + totala_åldern + " år"); }

Försök att lek runt så mycket som möjligt. Om du har svårt att förstå variabel scope, for loopar, osv. Mycket information finns på nätet.

Beroende om du vill läsa eller kolla video är individuellt. Men båda sätten finns, och sen att använda det praktiskt och med återupprepning sätter det i minnet.

Försök och att kolla felmeddelanden när det inte fungerar när du kompilerar, ofta så hintar det att det är någon rad som inte "fungerar som den ska". Alltid värt att kolla, även om man inte riktigt förstår vad som sägs.

Visa signatur

Speldator: [Intel Core i7 4790K] [ASUS Matrix GTX 780Ti x2] [ASUS MAXIMUS VII HERO] [Corsair Dominator Platinum 32GB] [Windows 7] [Logitech G400S] [Microsoft Ergonomic 4000] [BenQ XR3501 35" (HDMI)] [BenQ G900W 19" (VGA)]

Serverdator: [Intel Core i7 6850K] [ASUS X99-E WS] [Corsair Vengeance LPX 64GB] [2x Crucial MX300 1TB] [Cooler Master V1200] [CentOS 7]