C# addera värde till vektor via for loop

Permalänk
Medlem

C# addera värde till vektor via for loop

Hej!
Jag har en uppgift som snart ska lämnas in och jag har desperat googlat runt efter en lösning på mitt problem i flera dagar.
Jag ska göra ett program där man kan lägga till passagerare på en buss. Allt ska sparas i en vektor med max 25st platser. Sen ska man via meny kunna lägga till passagerare med ålder, skriva ut alla som är på bussen och sen även kunna addera alla åldrar.
Allt fungerar fint FÖRUTOM att lägga till passagerare en gång till. Då verkar tidigare värden raderas. Först frågar programmet hur många man vill lägga till t.ex 3st sen frågar den ålder på varje person. Efter det är klart är man tillbaka till menyn. Men om jag då väljer addera passagerare och skriver 4st till så får de 3 tidigare värdet 0.
Antagligen ligger problemet i denna bit kod men jag kan inte förstå vad.

public void add_passenger()
{
Console.WriteLine(antal_passagerare);
Console.WriteLine("Hur många passagerare vill du lägga till?");
antal = int.Parse(Console.ReadLine());

if (antal_passagerare + antal > 25)
{
int platserKvar = 25 - antal_passagerare;
Console.WriteLine("Du vill lägga till " + antal + " stycken passagerare, men bussen blir då överfull");
Console.WriteLine("Det finns " + platserKvar + " stycken platser kvar. Lägg till färre antal");
return;
}

for (int i = 0; i < antal; i++)
{
Console.WriteLine("Hur gammal är passageraren?"); //Användaren får skriva in ålder på varje passagerare
int nyPassagerare = int.Parse(Console.ReadLine());
passagerare[i] = nyPassagerare;
antal_passagerare++;
}

Permalänk
Medlem
Skrivet av Antrivia:

for (int i = 0; i < antal; i++)
{
Console.WriteLine("Hur gammal är passageraren?"); //Användaren får skriva in ålder på varje passagerare
int nyPassagerare = int.Parse(Console.ReadLine());
passagerare[i]; = nyPassagerare;
antal_passagerare++;
}

Tänk på vad du sätter i till här i början av loopen och vad passagerare[i] betyder.

Permalänk
Medlem

Den sista for-loopen i den kod du visar börjar ju från 0 varje gång, så den kommer att skriva över gamla värden om det redan finns några.

Permalänk
Medlem
Skrivet av SweDragon:

Tänk på vad du sätter i till här i början av loopen och vad passagerare[i] betyder.

Skrivet av Erik_T:

Den sista for-loopen i den kod du visar börjar ju från 0 varje gång, så den kommer att skriva över gamla värden om det redan finns några.

Jag har tänkt hela tiden att problemet sitter där men hur mycket jag än läser på och googlar runt så förstår jag verkligen inte hur jag ska skriva om for satsen. Läraren ger en inga svar heller.
Vilket annat värde kan jag sätta där istället för 0? Behöver jag en helt ny variabel att använda? Jag sliter mig verkligen i håret.

Permalänk
Medlem

Vet du vad passagerare[i] innebär? Vet du hur en for-loop fungerar?

Om du har en pärm med 25 blad, och du skriver på de första tre bladen, vilket blad i ordningen ska du skriva på om du vill fortsätta skriva?

Visa signatur

AMD Ryzen 7 5800X | 32 GB Corsair Vengeance 3200 MHz | ASUS TUF Geforce RTX 3080

Permalänk
Medlem
Skrivet av L'ombra:

Vet du vad passagerare[i] innebär?

Om du har en pärm med 25 blad, och du skriver på de första tre bladen, vilket blad i ordningen ska du skriva på om du vill fortsätta skriva?

Det är den variabeln jag använder för att säga vilken position i vektorn som ska få ett värde?

Ja jag förstår vad du menar. Såklart ska loopen i andra omgången börja fylla ifrån nästa lediga plats. T.ex 4 om man har skrivit på första 3. Men jag vet inte hur jag ska få in det i koden.
int i = 0 ska ändras till int i = antal_passagerare? Men det behövs mer. Har tänkt på detta i för många dagar så min hjärna är låst

Permalänk

Kollade snabbt på koden, om du byter passagerare[i]; = nyPassagerare; till passagerare[antal_passagerare] = nyPassagerare;
Vad händer då?

Visa signatur

Chassi: Corsair 350D ljuddämpad Moderkort: MSI Z87M Gaming Processor: i7 4770k @4.5 Ghz Processorkylare: Be Quiet Dark Rock Pro 3. Grafikkort: Asus 780 DCII Minnen: Corsair 1600Mhz 8GB. SSD: Samsung Evo 256GB Lagringsenhet: Seagate Barracuda 7200rpm 1TB Nätagg: Corsair AX860 Tangentbord: Ducky Shine 3 TKL MX RED Högtalare: Argon 7450A Hörlurar: Dt 770 pro 80Ω + Fiio e10 Mikrofon: Modmic 4.0 Mus: Qpad 5k

Permalänk
Hedersmedlem

@AltUnderCtrl Nej, det blir fel. Då skriver du allting utanför vektorns gräns (förutsatt att den är antal_passagerare i storlek vilket den bör vara).

@Antrivia "antal" låter väl som att det motsvarar hur många passagerare du har nu?
Resterande koden krävs för att se säkert att den uppdateras korrekt, men gör den det så kan du använda den.

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
NAS: 6700K/16GB/Debian+ZFS | Backup (offsite): 9600K/16GB/Debian+ZFS

Permalänk
Skrivet av Thomas:

@AltUnderCtrl Nej, det blir fel. Då skriver du allting utanför vektorns gräns (förutsatt att den är antal_passagerare i storlek vilket den bör vara).

Du har rätt om ditt antagande stämmer, jag antog att det inte var en array med dynamisk storlek, utan att den var satt till 25 konstant.

Visa signatur

Chassi: Corsair 350D ljuddämpad Moderkort: MSI Z87M Gaming Processor: i7 4770k @4.5 Ghz Processorkylare: Be Quiet Dark Rock Pro 3. Grafikkort: Asus 780 DCII Minnen: Corsair 1600Mhz 8GB. SSD: Samsung Evo 256GB Lagringsenhet: Seagate Barracuda 7200rpm 1TB Nätagg: Corsair AX860 Tangentbord: Ducky Shine 3 TKL MX RED Högtalare: Argon 7450A Hörlurar: Dt 770 pro 80Ω + Fiio e10 Mikrofon: Modmic 4.0 Mus: Qpad 5k

Permalänk
Medlem
Skrivet av Thomas:

@Antrivia "antal" låter väl som att det motsvarar hur många passagerare du har nu?

antal är hur många passagerare som ska läggas till, antal_passagerare är hur många passagerare det redan finns i vektorn.

Permalänk
Medlem
Skrivet av Thomas:

@AltUnderCtrl Nej, det blir fel. Då skriver du allting utanför vektorns gräns (förutsatt att den är antal_passagerare i storlek vilket den bör vara).

@Antrivia "antal" låter väl som att det motsvarar hur många passagerare du har nu?
Resterande koden krävs för att se säkert att den uppdateras korrekt, men gör den det så kan du använda den.

Antal_passagerare är varibalen för totala mängden passagerare. Antal är variabeln för mängden passagerare användaren vill lägga till på en gång. T.ex väljer han 3 där så frågar loopen 3 gånger vad passagerarens ålder är.

Skrivet av AltUnderCtrl:

Du har rätt om ditt antagande stämmer, jag antog att det inte var en array med dynamisk storlek, utan att den var satt till 25 konstant.

Vektorn är satt till 25 konstant!
public int[] passagerare = new int[25];

Permalänk
Medlem
Skrivet av Antrivia:

Det är den variabeln jag använder för att säga vilken position i vektorn som ska få ett värde?

Ja jag förstår vad du menar. Såklart ska loopen i andra omgången börja fylla ifrån nästa lediga plats. T.ex 4 om man har skrivit på första 3. Men jag vet inte hur jag ska få in det i koden.
int i = 0 ska ändras till int i = antal_passagerare? Men det behövs mer. Har tänkt på detta i för många dagar så min hjärna är låst

Du är inne på rätt spår. Det finns några olika, snarlika lösningar du kan tillämpa.

Om du sätter int i = antal_passagerare, så behöver du även ändra i < antal, vilket anger villkoret för att loopen ska avslutas. Utan att ändra den, om du har 10 passagerare, och vill lägga till 3, så kommer loopen börja med värde 10, och öka tills värdet inte längre är mindre än 3, dvs den kommer avslutas direkt.

Alternativt så lämnar du loopvärdena som de är, och förskjuter istället vektorpositionen med antal passagerare när du lägger till en ny. Ibland är det enklare att låta loopar börja på 0.

Slutligen så kan du helt enkelt säga att nya passagerare alltid läggs till i vektorposition så många passagerare du har.

Som du redan nämner så är målet att lägga till passagerarna i första lediga plats. Du har några olika variablar som du kan använda för att få talet du behöver.

Visa signatur

AMD Ryzen 7 5800X | 32 GB Corsair Vengeance 3200 MHz | ASUS TUF Geforce RTX 3080

Permalänk
Medlem

Om du vet hur många passagerare du har (INT VÄRDET: antal_passagerare) och hur stor din vektor är, så vet du vilken nästa plats du ska skriva in nästa passagerare i, om du startar din for-loop på den platsen dvs istället för i = 0 så kanske INT VÄRDET i kan tilldelas något annat värde än 0, kanske ett annat INT VÄRDE?...(minus 1 då vektorn börjar på 0) så kanske du kan klura ut hur du kan få in nästa passagerare på rätt plats och sen jobba dig framåt utifrån det?