5 svar
1011 visningar
Toman 5 – Fd. Medlem
Postad: 14 okt 2020 11:34

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?

}
}

Lindehaven 820 – Lärare
Postad: 14 okt 2020 12:29

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.

Aerius 504 – Fd. Medlem
Postad: 14 okt 2020 12:33

I metoden add_passenger glömmer du att lägga till age i arrayen passagerare. 

Toman 5 – Fd. Medlem
Postad: 14 okt 2020 16:08
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?

Laguna Online 30472
Postad: 14 okt 2020 16:22

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.

Aerius 504 – Fd. Medlem
Postad: 14 okt 2020 18:36

Du kanske kan använda ArrayList. Då blir det lätt.

Svara
Close