Programmering 1 - Skriva ut inmatade värden från vektor
Hej, jobbar med ett projekt där jag med hjälp av en vektor skall fylla platserna i en buss. Hittills har jag en fungerade meny, jag kan välja hur många passagerare jag vill lägga till (max [25]) och även ange värdet (ålder) på dessa passagerare. Men i metoden print_buss så skrivs hela vektor ut med 25 värden på 0. De tillagade värdena borde väl lagras i int age? Har gett int age ett tillfälligt värde på 0 vid deklaration men som jag förstått skall det sluta gälla när man tilldelare den ett nytt värde, vilket jag gör i add_passenger.
Så här ser in kod ut, vad är det jag missar?
using System;
using System.Security.Cryptography.X509Certificates;
namespace Bussen
{
class Buss
{
public int[] passagerare = new int[25];
public int antal_passagerare;
public int age = 0; // deklarerar en int med tillfälligt värde
public void Run()
{
int meny = 0; //En switch case meny deklareras
do
{
Console.WriteLine("VÄLKOMMEN OMBORD PÅ BUSSEN!\n Välj ett av följande alternativ:");
Console.WriteLine("***********************************");
Console.WriteLine("1. Lägg till passagerare");
Console.WriteLine("2. Se passagerarlista");
Console.WriteLine("3. Totala ålder");
Console.WriteLine("4. Beräkna medelålder");
Console.WriteLine("5. Avsluta programmet\n");
Console.WriteLine("***********************************");
Console.WriteLine("Välj ett alternativ i menyn: ");
meny = int.Parse(Console.ReadLine()); //omvandlar inmatade int till alternativ i menyn (?)
switch (meny) //anropar de olika metoderna
{
case 1: add_passenger();
break;
case 2: print_buss();
break;
case 3: calc_total_age();
break;
case 4: calc_average_age();
break;
case 5: Console.WriteLine("Programmet avslutas");
break;
default:
Console.WriteLine("Felaktig inmatning. Skriv in en siffra mellan 1-4 \n");
break;
}
} while (meny != 0); //menyn loopas så länge som "meny" inte är lika med 0, alltså aldrig
}
//De olika metoderna
public void add_passenger() //metod för att lägga till passagerare
{
Console.WriteLine("*** LÄGG TILL PASSAGERARE ***\n");
Console.WriteLine("Ange hur många passagerare som kliver på vid den här hållplatsen: ");
string inTal = Console.ReadLine();
antal_passagerare = Convert.ToInt32(inTal); //konverterar string inTal till int antal_passagerare
for (int i = 0; i < antal_passagerare; i++) //Vektor deklareras.
{
Console.WriteLine("Ange passagerar " + i + "s ålder: "); //här läggs värdena till i vektorn
string inAge = Console.ReadLine();
age = Convert.ToInt32(inAge); //string inAge konverteras int age och ger den ett nytt värde
//Så länge som det finns plast i antal_passagerare loopas for och man kan lägga till nya värden
}
int plats = passagerare.Length - antal_passagerare; //vektors längd [25] subtraheras med antalet värden.
Console.WriteLine("Det finns nu " + plats + " lediga platser på bussen\n"); //antalet lediga platser visas
}
public void print_buss()
{
Console.WriteLine("*** SE PASSAGERARLISTA ***\n");
Console.WriteLine("Just nu finns följande passagerare på bussen");
foreach (int age in passagerare)
{
Console.WriteLine(age); // 25 st. 0:or skrivs ut, varför?
}
}
I metoden add_passenger sparas inte åldrarna i arrayen passagerare. Åldern för varje passagerare sparas enbart i den lokala variabeln age som sedan skrivs över i varje varv i slingan.
När metoden print_buss anropas så skriver den ut innehållet i arrayen passagerare och det är 0 (noll) i varje elelement. Kompilatorn initierar nämligen variabler till 0 om man inte gör det själv.
I metoden add_passenger glömmer du att lägga till age i arrayen passagerare.
Lindehaven skrev:I metoden add_passenger sparas inte åldrarna i arrayen passagerare. Åldern för varje passagerare sparas enbart i den lokala variabeln age som sedan skrivs över i varje varv i slingan.
När metoden print_buss anropas så skriver den ut innehållet i arrayen passagerare och det är 0 (noll) i varje elelement. Kompilatorn initierar nämligen variabler till 0 om man inte gör det själv.
okej, då förstår jag att de inte går. Har klurat lite nu men hur lägger jag till age i arrayen? Skall jag göra de redan när den deklareras eller i metoden? Någon ledtråd?
Du får stoppa in den inlästa åldern nånstans i 'passagerare' när metoden add_passenger körs. Se till att du lägger den efter dem som redan finns där.
Du kanske kan använda ArrayList. Då blir det lätt.