Programmering 1 projekt "Bussen"

Trädvy Permalänk
Medlem
Registrerad
Maj 2019

Programmering 1 projekt "Bussen"

Hej, började läsa programmering 1 på distans för 3 veckor sedan och har fastnat lite vi projekt uppgiften "bussen".

Det finns 25 platser på bussen som jag skapat via en vektor.

Sedan kommer det en meny med olika val, man väljer lägg till passagerare.

Man lägger till passagerare med att skriva in åldern på denna passageraren.

Här kommer mitt problem... Jag måste skriva in 25 heltal alltså fylla alla elementen vilket jag inte vill göra. Vill fylla ett element i taget och sedan komma tillbaka till menyn för att kunna välja "lägg till passagerare" igen och fylla element två i vektorn.

I metoden för att att fylla vektorn har jag använt mig av en for loop, kan man ens fylla ett element i taget i en sådan loop?

Ps uppgiften är inte helt färdig utan har fastnat här.

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2007
Skrivet av Pandz:

I metoden för att att fylla vektorn har jag använt mig av en for loop, kan man ens fylla ett element i taget i en sådan loop?

Tekniskt sett ja, du kan helt enkelt loopa från indexet du vill fylla till indexet du vill fylla. Men loopen fyller ju i så fall ingen funktion, d.v.s.:

for (int i = 3; i < 3; ++i) { vektor[i] = 17; } => vektor[3] = 17;

I ditt fall så behöver du hålla reda på hur många element du redan fyllt, så att du vet vilket index nästa lediga element har. Du har redan en variabel för det, antal_passagerare, men du använder den inte än.

Använd för övrigt gärna code-taggar när du postar kod här, så blir den enklare att läsa:
[code]
Kod här
[/code]

Trädvy Permalänk
Medlem
Registrerad
Maj 2019

@perost: Tack så mycket för svaret! kliade mig på huvudet bra länge och hann bli ovänn med google hehe

stötte dock på ett nytt problem, jag kan skriva in 26 element... förstår inte varför.

Trädvy Permalänk
Moderator
Registrerad
Jul 2017

Du kan ju inte skriva in 26 element? du får frågan om att skriva ut det 26:e elementet, men sedan när du väl skriver in det kommer du få en exception om att du försöker skriva på en plats i arrayen som inte går.

Kolla först innan du frågar användaren om åldern om bussen är full först!

En bild säger mer än tusen ord. Så här gör du för att lägga upp bilder till ditt foruminlägg.

Synpunkter på moderering eller andra frågor om siten? Välkommen att kontakta oss via Sweclockers kontaktformulär eller i feedback-forumet.

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2007
Skrivet av Pandz:

stötte dock på ett nytt problem, jag kan skriva in 26 element... förstår inte varför.

Varför skulle du inte kunna göra det? Du kontrollerar ju inte hur många element som tillåts, utan lägger bara till element tills programmet kraschar. Kontrollera att vektorn inte är full med en if-sats innan du försöker lägga till ett nytt element.

Tänk då också på att passagerare.Length kommer vara 25 oavsett hur många element du "lagt till", eftersom vektorn alltid har 25 element. Det enda du gör när du "lägger till" ett element är att skriva över värdet på ett av elementen. Du bör med andra ord föredra att använda Length av vektorn när du kontrollerar hur många element som får läggas till istället för att hårdkoda gränsen till 25, eftersom det gör det enklare att ändra storleken på vektorn. Det kanske inte behövs i just detta program, men är en bra vana att ha.

Ett tips är för övrigt att kolla in denna guide för hur debuggern fungerar. Kursen du går tar troligtvis inte upp debuggern, vilket är lite som att lära sig cykla utan stödhjul på en väg full av skarpa stenar. Ju tidigare du lär dig använda debuggern, dessto mer tid kommer du spara på felsökning.

Trädvy Permalänk
Medlem
Registrerad
Maj 2019

@pv2b:

Gjorde det nu! Tack så mycket

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2007

@Pandz: Du kan använda \n för att "skriva ut" en ny rad, t.ex.:

Console.WriteLine("\nBussen är full med passagerare!\n");

(Tekniskt sett borde man använda Environment.Newline, men \n fungerar bra så länge som man bara skriver ut till konsollen.)

Trädvy Permalänk
Medlem
Registrerad
Maj 2019

@perost: Console.WriteLine("\nBussen är full med passagerare!\n");, gjorde det så då det endast ska köras i konsolen.

Har problem med metod print_buss(), när jag gör ett anrop på den i konsolen skriver den även alla elementen även om dom inte fått ett värde med "0". Skulle önskat att det stod tom plats eller att den endast skriver ut dom elementen som fått ett värde. Kan någon hjälpa mig vad det är jag göra fel här.

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2007
Skrivet av Pandz:

Har problem med metod print_buss(), när jag gör ett anrop på den i konsolen skriver den även alla elementen även om dom inte fått ett värde med "0". Skulle önskat att det stod tom plats eller att den endast skriver ut dom elementen som fått ett värde. Kan någon hjälpa mig vad det är jag göra fel här.

Elementen i en array av int initialiseras till 0, inte null. Det är därför som t.ex. din funktion för att räkna ut summan fungerar trots att den går igenom hela arrayen. Så jämför mot 0 istället (och anta att alla passagerare är minst 1 år gamla), eller använd antal_passagerare-variabeln för att bara loopa igenom den del av arrayen som är fylld.

Trädvy Permalänk
Medlem
Registrerad
Maj 2019

@perost: Tack, och där var sista metoden färdig!

Har dock två sista saker jag skulle vilja kolla om dom är möjliga att korrigera.

1. I Menyn undrar jag om man kan stänga av programmet så att konsolen stänger ner sig själv och inte bara skriver ut en rad, "Programmet avslutas...".

2.
Default "Felaktig inmatning" kommer endast när jag skriver in en siffra som inte finns i menyn, men vill att den informationen även ska komma vid ett tecken eller bokstav.

do { Console.WriteLine("\nVälj ett alternativ nedan\n"); Console.WriteLine("1: Lägg till passagerare"); Console.WriteLine("2: Skriv ut åldern på alla passagerare"); Console.WriteLine("3: Skriv ut den totala åldern på alla passagerare ombord"); Console.WriteLine("4: Avsluta Programmet"); val = int.Parse(Console.ReadLine()); switch (val) { case 1: LäggTill_passenger(); break; case 2: print_buss(); break; case 3: calc_total_age(); break; case 4: Console.WriteLine("Programmet avslutas..."); break; default: Console.WriteLine("Felaktig inmatning"); break; } } while (val != 0);

Trädvy Permalänk
Medlem
Registrerad
Mar 2018

@Pandz: Ang 2. Du har väl någon form av kurslitteratur? Bläddra/läs i den. Får intrycket av att du just nu frågar först innan du försöker själv. Sedan så finns allt redan på nätet, ibland är det svårare att få tag på. Och ibland är det lättare. Att få ett exakt svar på sin fråga är inte alltid lätt. https://www.google.com/search?q=felhantering+c%23&ie=utf-8&oe...

Trädvy Permalänk
Medlem
Registrerad
Maj 2019

@ToddTheOdd:

Jag började läsa programmering för 3 veckor sedan, har inte haft tillgång till någon lärare som jag kan fråga när de kör fast om man säger så. Vänder mig till läroboken först, sedan internet och när jag slutligen inte förstår vänder jag mig hit.

Tack för länken

Trädvy Permalänk
Medlem
Registrerad
Mar 2018

@Pandz: Inte för att vara sådan men hur avancerat måste du göra det? Vad står det i uppgiften att du ska göra egentligen? Tänker på just felhantering och liknande. Förstår att man gärna vill göra så mycket och så bra som möjligt från början. Men ibland kan det vara bra att ta det i små steg och inte ta allt på en gång

Trädvy Permalänk
Medlem
Registrerad
Maj 2019

@ToddTheOdd: Du har helt rätt! Jag har nöjt mig genom hela kursen att bara klara uppgiften och hoppat felhanteringen helt... Men känslan jag får nu när jag försöker göra om min kod till att fungera så bra som möjligt är att jag håller på med felhantering? Eller är jag ute och cyklar hehe

Jag har tyvärr inte läst någon kurs på 8 år och har ingen bra studievana.. Då denna kursen är ganska intensiv och på distans kommer jag att nöja mig med godkänt för att sedan stärka min kompetens inför utbildningen som jag hoppas komma in på till hösten.

Här har du uppgiften.

https://www.dropbox.com/s/7obtk1u4f8rzcum/Projekt%20i%20progr...

mvh

Andreas