Läskbacken slutprojekt programmering 1 C#

Permalänk

Läskbacken slutprojekt programmering 1 C#

Halloj!
Håller nu på med mitt slutprojekt i programmering 1 och har fastnat på hur man räknar ut det totala värdet utav alla drycker man valt i läskbacken...
alla drycker har samma pris = 5kr så jag tycker inte att det borde vara för svårt att räka ut detta... (Jag siktar inte på ett superhögt betyg utan vill klara kursen men ändå förstå vad som händer:) )

Här är min kod:

namespace sodacrate { class Sodacrate { private string [] flaskor = new string[24]; private int antal_flaskor = 0; public void Run() { int meny = 0; do { Console.WriteLine("Välkommen till läskbacks-simulatorn!"); Console.WriteLine("Välj ett alternativ nedan!"); Console.WriteLine("1: Lägg till läsk"); Console.WriteLine("2: Visa innehållet i läskbacken"); Console.WriteLine("3: Totala kostnaden för backen"); Console.WriteLine("0: Avsluta"); meny = int.Parse(Console.ReadLine()); switch (meny) { case 1: add_soda(); break; case 2: print_crate(); break; /*case 3: calc_total(); break;*/ case 0: Console.WriteLine("Avslutar programmet..."); break; } }while ( meny != 0); } public void add_soda() { do { Console.WriteLine("Du får nu skriva in vilka drycker du vill ha i backen tills den är full:"); flaskor[antal_flaskor] = Console.ReadLine(); antal_flaskor++; }while (antal_flaskor != 24); if (antal_flaskor == 24) { Console.WriteLine("Backen är nu full med läsk!"); } } public void print_crate() { foreach (string back in flaskor) { Console.WriteLine(back); } } public int calc_total() { //HÄR } } class Program { public static void Main(string[] args) { //Skapar ett objekt av klassen Sodacrate som heter sodacrate var sodacrate = new Sodacrate(); sodacrate.Run(); Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } }

Permalänk
Medlem

Du har ju en int med antalet flaskor. antal_flaskor * 5 = svaret

Permalänk
Medlem

Console.WriteLine("Totala kostnaden är nu "+antal_flaskor*5);

Visa signatur

Citera för svar :)

Intel 3770k / Msi Mpower / 980 TI / 16gb 1600mhz Corsair Vengeance / H100i / Silverstone Strider 1000w Gold / Samsung 830 128gb / Fractal Design Arc

Permalänk
Medlem

Får nästan känslan av att koden i övrigt är kopierad för detta borde vara rätt lätt i förhållande till den övriga koden

Permalänk

@Najsisen:

public int calc_total() { int total = antal_flaskor*5; Console.WriteLine("totala kostnaden är nu"+total); return total; }

Såhär gjorde jag nu, och när jag väljer "totala kostnaden för backen" Så hände absolut inget. Varför?

Permalänk
Medlem
Skrivet av littymcnitty:

@improwise: Koden är inte kopierad... Försökte med denna metoden ett tag men man måste returnera ett värde? vilket?

Det måste du inte, ändra "public int calc_total()" till "public void calc_total()"

Visa signatur

Desktop: | Win10 | InWin 303 | ASUS TUF X570 | AMD Ryzen 5 3600 | Noctua NH-U12S (PP) | Intel 600p 256GB | Gigabyte GTX 670 | 32GB DDR4 2400Mhz | Corsair RM650x | 3x 1080 Screens |
Datacenter: | 1x Physical | 1x Virtual |
Laptop: | 2x |

Dell Certified Technician

Permalänk
Medlem
Skrivet av littymcnitty:

@Najsisen:

public int calc_total() { int total = antal_flaskor*5; Console.WriteLine("totala kostnaden är nu"+total); return total; }

Såhär gjorde jag nu, och när jag väljer "totala kostnaden för backen" Så hände absolut inget. Varför?

Är case 3 fortfarande utkommenterad?

switch (meny) { case 1: add_soda(); break; case 2: print_crate(); break; /*case 3: calc_total(); break;*/ case 0: Console.WriteLine("Avslutar programmet..."); break; }

Visa signatur

| EVGA Z170 FTW | i7 6700k | ASUS RTX 3070 | 16GB DDR4 3200MHz | Cooler Master V850 | Samsung 840 Evo 250GB + 2x WD Black 500GB + Seagate 2TB SSHD + Samsung 970 Evo M.2 500GB |

Permalänk

@BrutalSwede: Herregud jag är fan hjärndöd... hahaha här har jag suttit i timmar och försökt olika metoder.
Ska se om det funkar nu, tack!

Permalänk

Nu har jag en sista sak att göra klart. Instruktioner nedan.

Man ska inte kunna stoppa in fler än 25
drycker i backen, eventuellt kan man få välja
att ersätta en flaska i en full back med en
annan. Här används då med fördel variabeln
amount_bottles som kan hålla
reda på antal flaskor.
Är backen full ska man få meddelande om
detta och då får man välja en position och den gamla läsken försvinner.

Hur kan man ersätta en flaska med en annan om backen är full? Ge mig gärna vägledning och inte färdiga svar för vill lära mig själv.
Tack!

Permalänk
Medlem

@littymcnitty:

Du kan komma åt vilket objekt som helst i din Array du kallar "flaskor" med ett index.

För att komma åt flaska #1 används alltså index 0 osv.

Detta bör vara hjälp på traven för att fundera på en eventuell lösning. glhf!

Edit: Jag menar alltså såhär: flaskor[0] (Detta är det första objektet i din array).

Permalänk

@Forsgren: Tack! skall försöka imorgon, uppdaterar.

Permalänk
Medlem

@Forsgren: Eller ännu bättre, använd en List. Men det kanske kommer senare i utbildningen. Array fungerar så klart också men känns lite osmidigt i jämförelse tycker jag, speciellt om man är nybörjare kan jag tänka mig men det var rätt länge sen jag själv gick en introkurs i programmering

Permalänk
Medlem
Skrivet av improwise:

@L.Forsgren: Eller ännu bättre, använd en List. Men det kanske kommer senare i utbildningen. Array fungerar så klart också men känns lite osmidigt i jämförelse tycker jag, speciellt om man är nybörjare kan jag tänka mig men det var rätt länge sen jag själv gick en introkurs i programmering

Ja, kommer knappt ihåg sist jag använde en array i princip. Men tror, som du säger, att det kommer lite senare. Har för mig att man alltid börjar med Array i alla typer av introkurser till programmering av någon anledning (Kanske finns en bra anledning som jag inte kan komma på just nu?).

Permalänk
Medlem

@littymcnitty: Värt att tänka på är att din array alltid har 24 element (som den är deklarerad nu, du kanske ska ändra till 25?). När den skapas i början av programmet så fylls den med default-konstruerade värden för typen som den innehåller, i det här fallet strängar där default-värdet är en tom sträng. Det är t.ex. därför du måste ha variabeln antal_flaskor för att hålla reda på hur många flaskor du har, eftersom flaskor.Length alltid kommer returnera 24.

Vart jag vill komma med detta är att när du "lägger till" en flaska i arrayen så lägger du inte till ett nytt element, du ändrar bara värdet på ett av elementen. D.v.s. om användaren väljer att lägga till t.ex. "läskeblask" i backen så ändras flaskor[0] från "" till "läskeblask". Du vet alltså redan hur man ersätter en flaska eftersom det är precis det du egentligen gör i add_soda.

Permalänk
Medlem

do { Console.WriteLine("Du får nu skriva in vilka drycker du vill ha i backen tills den är full:"); flaskor[antal_flaskor] = Console.ReadLine(); antal_flaskor++; }while (antal_flaskor != 24);

Denna gör att totalsumman är en konstant. (24*5)kr.

Visa signatur

"Om man arbetar tillräckligt länge med att förbättra ett föremål går det sönder. "

Hjälp oss göra världen lite snällare! www.upphittat.nu

Permalänk
Medlem
Skrivet av ZecretW:

Denna gör att totalsumman är en konstant. (24*5)kr.

Inte riktigt, den kan även vara 0. Men bra poäng, backen är alltid tom eller full eftersom användaren tvingas fylla hela backen.

Permalänk
Medlem
Skrivet av perost:

Inte riktigt, den kan även vara 0. Men bra poäng, backen är alltid tom eller full eftersom användaren tvingas fylla hela backen.

Korrekt. man kan fråga efter summan innan man matat in läskedrycker.

De säger att romarriket gick under för att de inte hade något sätt att beskriva noll.

Visa signatur

"Om man arbetar tillräckligt länge med att förbättra ett föremål går det sönder. "

Hjälp oss göra världen lite snällare! www.upphittat.nu

Permalänk
Medlem
Skrivet av Forsgren:

Ja, kommer knappt ihåg sist jag använde en array i princip. Men tror, som du säger, att det kommer lite senare. Har för mig att man alltid börjar med Array i alla typer av introkurser till programmering av någon anledning (Kanske finns en bra anledning som jag inte kan komma på just nu?).

Arrayer är lite mer svårjobbade då de kräver en längd vid instansiering och inte har lika simpla add/remove metoder som en List. Därför är det bra att börja med det för att förstå hur arrayer och index fungerar. För en List är i grunden en typ av array också.
Handlar om att lära sig den svåra vägen så att man uppskattar det enklare efteråt 😁

Arrayer är också något snabbare att loopa igenom, jag brukar skapa en array om jag vet att jag bara ska ha det till att visa någon data (inte lägga till / ta bort). Men skillnaden är rätt marginell, så om du inte sitter med bitshifting eller dylikt så lär du för det mesta använda List eller Dictionary.

Sen om du behöver flera dimensioner så får du använda arrays.

Skickades från m.sweclockers.com

Permalänk

Lånar tråden lite istället för att göra en ny

Håller på med samma uppgift om TS och är snart klar (tror jag) hehe. Har fastnat på en grej, sen finns det saker som jag självklart vill förbättra men det kan jag ändra på sen, först vill jag ha ett fungerande program.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace mySodaback { class Program { public static void Main(string[] args) { //Skapar ett objekt av klassen Sodacrate som heter sodacrate var sodacrate = new Sodacrate(); sodacrate.Run(); Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } class Sodacrate { private string[] flaskor = new string[24]; //* Skapar en vektor med 24 platser. private int antal_flaskor = 0; //* Ger värdet på antal flaskor 0, för tillfället. public void Run() { Console.WriteLine("Hej min vän! Välkommen till läsk-simulatorn!"); // Välkomnar gästen in i programmet. Console.WriteLine("Välj ett av alternativ nedan!"); int meny = 0; // Skapar en meny, samt ger värdet meny 0. do // Skapar en do loop som går runt med 4(5) olika alternativ som tar mig vidare isåfall till 4 olika "case" { Console.WriteLine("1: Lägg till en dryck"); // Skriver ut text Console.WriteLine("2: Visa vad innehållet i läskbacken är"); // Skriver ut text Console.WriteLine("3: All kostnad för läskbacken"); // Skriver ut text Console.WriteLine("0: Avsluta"); // Skriver ut text try // Gör en try/catch fall ifall användaren skriver bokstäver och inte siffror { meny = int.Parse(Console.ReadLine()); } catch { Console.WriteLine("Du kan bara skriva siffor. Starta programmet igen"); } switch (meny) // Här är olika case som användaren väljer. { case 1: // Väljer användaren 1, så tar den mig vidare till "add_soda();" vilket kommer längre ner Add_soda(); break; case 2: // Väljer användaren 1, så tar den mig vidare till "Print_crate();" vilket kommer längre ner Print_crate(); break; case 3: // Väljer användaren 1, så tar den mig vidare till "calc_total;" vilket kommer längre ner Calc_total(); break; default: // Väljer användaren en siffra som inte är mellan 0-3 så skrivs detta ut Console.WriteLine(""); Console.WriteLine("Du kan inte ta en siffra som inte finns bland alternativen."); Console.WriteLine("Försök igen, titta på alternativen och välj mellan 0-3"); Console.WriteLine(""); break; } } while (meny != 0); // så länge meny inte är lika med 0 så görs inte detta } public void Add_soda() // Här kommer man om man valt case nr 1, vilket är att man får skriva in sina drycker. { Console.WriteLine(""); Console.WriteLine("Du får nu skriva in vilka drycker du vill ha i backen tills den är full:"); // Skriver ut text och ber användaren skriva drycken. int addsodameny = 0; do { Console.WriteLine("1: Coca-Cola"); // skriver ut alternativen för flaska Console.WriteLine("2: Fanta"); Console.WriteLine("3: Pepsi"); Console.WriteLine("4: Öl"); Console.WriteLine("5: Redbull"); Console.WriteLine("6: Cider"); Console.WriteLine("7: Vatten"); try { addsodameny = int.Parse(Console.ReadLine()); } catch { Console.WriteLine("Inget av alternativ var andra tecken än siffror, försök igen."); } string addsodameny1 = null; flaskor[antal_flaskor] = addsodameny1; // lagrar svaren i min vektor antal_flaskor++; // för varje svar jag skriver så ökar det med 1 i vektorn hela vägen till 24 switch (addsodameny) // Skapar en meny, som skriver ut vilken dryck användaren väljer tills backen blir full. { case 1: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Coca-Cola"); Console.WriteLine("-------------------"); break; case 2: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Fanta"); Console.WriteLine("-------------------"); break; case 3: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Pepsi"); Console.WriteLine("-------------------"); break; case 4: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Öl"); Console.WriteLine("-------------------"); break; case 5: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Redbull"); Console.WriteLine("-------------------"); break; case 6: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Cider"); Console.WriteLine("-------------------"); break; case 7: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Vatten"); Console.WriteLine("-------------------"); break; case 0: Console.WriteLine("Lyssnar du inte på mig? Hejdå! Svara rätt nästa gång"); break; default: // om man skriver siffror ovanför 1-7 så skrivs detta ut. Console.WriteLine("-------------------"); Console.WriteLine("Siffor mellan 1-7 min vän"); Console.WriteLine("-------------------"); break; } } while (addsodameny != 24); if (antal_flaskor == 24) // När backen är full ska detta meddelandet spelas och då ska man komma tillbaka till den vanliga menyn { Console.WriteLine(""); Console.WriteLine("Backen är nu full, vänligen välj ett av alternativen nedan om du vill vidareforska backen:"); Console.WriteLine(""); } } public void Print_crate() // denna kod är hämtat från exemplet och skriver ut vad jag har i min vektor { Console.WriteLine(""); // Skriver ut text som gör programmet enklare att följa samt roligare. Console.WriteLine("Här har du innehållet i backen."); Console.WriteLine(""); foreach (var dryck in flaskor) // Här är koden som skriver ut allt i min vektor. { if (dryck != null) Console.WriteLine(dryck); else Console.WriteLine("Tom plats"); } Console.WriteLine(""); Console.WriteLine("Vill du se värdet i backen, lägga till någon dryck eller till och med avsluta, välj ett av alternativen nedan:"); // tillbaka till menyn Console.WriteLine(""); } public void Calc_total() // Här är koden som ska räkna ut värdet, jag utgår från att varje flaska kostar 5kr. därför blir det backen * 5. { Console.WriteLine(""); Console.WriteLine("Totala kostnaden är nu " + antal_flaskor * 5 + "kr"); Console.WriteLine("Vill du se vad backen innehåller, lägga till läsk eller avsluta programmet. Välj då ett av alternativen nedan:"); Console.WriteLine(""); } } }

Felet för mig är att när användaren ska välja sina drycker som han ska lägga in i backen så fungerar loopen och menyn som det ska ända fram tills slutet, då if-satsen som ska säga till när backen är == 24 ska skriva ut "backen är full" men programmet stängs av istället. Har testat massa olika grejer utan att förstå vad felet är..

EDIT: Jag ändrade min while loop till (antal_flaskor != 24). Då fungerade att if satsen skrevs ut efter 24 inmatningar, men när jag sedan ska kolla innehållet så står det tom_plats. Vet ej om det är fel på foreach koden eller om det inte lagras i min vektor..?

Permalänk
Medlem
Skrivet av mattin123:

Håller på med samma uppgift om TS och är snart klar (tror jag) hehe. Har fastnat på en grej, sen finns det saker som jag självklart vill förbättra men det kan jag ändra på sen, först vill jag ha ett fungerande program.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace mySodaback { class Program { public static void Main(string[] args) { //Skapar ett objekt av klassen Sodacrate som heter sodacrate var sodacrate = new Sodacrate(); sodacrate.Run(); Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } class Sodacrate { private string[] flaskor = new string[24]; //* Skapar en vektor med 24 platser. private int antal_flaskor = 0; //* Ger värdet på antal flaskor 0, för tillfället. public void Run() { Console.WriteLine("Hej min vän! Välkommen till läsk-simulatorn!"); // Välkomnar gästen in i programmet. Console.WriteLine("Välj ett av alternativ nedan!"); int meny = 0; // Skapar en meny, samt ger värdet meny 0. do // Skapar en do loop som går runt med 4(5) olika alternativ som tar mig vidare isåfall till 4 olika "case" { Console.WriteLine("1: Lägg till en dryck"); // Skriver ut text Console.WriteLine("2: Visa vad innehållet i läskbacken är"); // Skriver ut text Console.WriteLine("3: All kostnad för läskbacken"); // Skriver ut text Console.WriteLine("0: Avsluta"); // Skriver ut text try // Gör en try/catch fall ifall användaren skriver bokstäver och inte siffror { meny = int.Parse(Console.ReadLine()); } catch { Console.WriteLine("Du kan bara skriva siffor. Starta programmet igen"); } switch (meny) // Här är olika case som användaren väljer. { case 1: // Väljer användaren 1, så tar den mig vidare till "add_soda();" vilket kommer längre ner Add_soda(); break; case 2: // Väljer användaren 1, så tar den mig vidare till "Print_crate();" vilket kommer längre ner Print_crate(); break; case 3: // Väljer användaren 1, så tar den mig vidare till "calc_total;" vilket kommer längre ner Calc_total(); break; default: // Väljer användaren en siffra som inte är mellan 0-3 så skrivs detta ut Console.WriteLine(""); Console.WriteLine("Du kan inte ta en siffra som inte finns bland alternativen."); Console.WriteLine("Försök igen, titta på alternativen och välj mellan 0-3"); Console.WriteLine(""); break; } } while (meny != 0); // så länge meny inte är lika med 0 så görs inte detta } public void Add_soda() // Här kommer man om man valt case nr 1, vilket är att man får skriva in sina drycker. { Console.WriteLine(""); Console.WriteLine("Du får nu skriva in vilka drycker du vill ha i backen tills den är full:"); // Skriver ut text och ber användaren skriva drycken. int addsodameny = 0; do { Console.WriteLine("1: Coca-Cola"); // skriver ut alternativen för flaska Console.WriteLine("2: Fanta"); Console.WriteLine("3: Pepsi"); Console.WriteLine("4: Öl"); Console.WriteLine("5: Redbull"); Console.WriteLine("6: Cider"); Console.WriteLine("7: Vatten"); try { addsodameny = int.Parse(Console.ReadLine()); } catch { Console.WriteLine("Inget av alternativ var andra tecken än siffror, försök igen."); } string addsodameny1 = null; flaskor[antal_flaskor] = addsodameny1; // lagrar svaren i min vektor antal_flaskor++; // för varje svar jag skriver så ökar det med 1 i vektorn hela vägen till 24 switch (addsodameny) // Skapar en meny, som skriver ut vilken dryck användaren väljer tills backen blir full. { case 1: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Coca-Cola"); Console.WriteLine("-------------------"); break; case 2: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Fanta"); Console.WriteLine("-------------------"); break; case 3: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Pepsi"); Console.WriteLine("-------------------"); break; case 4: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Öl"); Console.WriteLine("-------------------"); break; case 5: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Redbull"); Console.WriteLine("-------------------"); break; case 6: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Cider"); Console.WriteLine("-------------------"); break; case 7: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Vatten"); Console.WriteLine("-------------------"); break; case 0: Console.WriteLine("Lyssnar du inte på mig? Hejdå! Svara rätt nästa gång"); break; default: // om man skriver siffror ovanför 1-7 så skrivs detta ut. Console.WriteLine("-------------------"); Console.WriteLine("Siffor mellan 1-7 min vän"); Console.WriteLine("-------------------"); break; } } while (addsodameny != 24); if (antal_flaskor == 24) // När backen är full ska detta meddelandet spelas och då ska man komma tillbaka till den vanliga menyn { Console.WriteLine(""); Console.WriteLine("Backen är nu full, vänligen välj ett av alternativen nedan om du vill vidareforska backen:"); Console.WriteLine(""); } } public void Print_crate() // denna kod är hämtat från exemplet och skriver ut vad jag har i min vektor { Console.WriteLine(""); // Skriver ut text som gör programmet enklare att följa samt roligare. Console.WriteLine("Här har du innehållet i backen."); Console.WriteLine(""); foreach (var dryck in flaskor) // Här är koden som skriver ut allt i min vektor. { if (dryck != null) Console.WriteLine(dryck); else Console.WriteLine("Tom plats"); } Console.WriteLine(""); Console.WriteLine("Vill du se värdet i backen, lägga till någon dryck eller till och med avsluta, välj ett av alternativen nedan:"); // tillbaka till menyn Console.WriteLine(""); } public void Calc_total() // Här är koden som ska räkna ut värdet, jag utgår från att varje flaska kostar 5kr. därför blir det backen * 5. { Console.WriteLine(""); Console.WriteLine("Totala kostnaden är nu " + antal_flaskor * 5 + "kr"); Console.WriteLine("Vill du se vad backen innehåller, lägga till läsk eller avsluta programmet. Välj då ett av alternativen nedan:"); Console.WriteLine(""); } } }

Felet för mig är att när användaren ska välja sina drycker som han ska lägga in i backen så fungerar loopen och menyn som det ska ända fram tills slutet, då if-satsen som ska säga till när backen är == 24 ska skriva ut "backen är full" men programmet stängs av istället. Har testat massa olika grejer utan att förstå vad felet är..

EDIT: Jag ändrade min while loop till (antal_flaskor != 24). Då fungerade att if satsen skrevs ut efter 24 inmatningar, men när jag sedan ska kolla innehållet så står det tom_plats. Vet ej om det är fel på foreach koden eller om det inte lagras i min vektor..?

Stängs av låter diffust, får du något exception? Sätt en breakpoint innan if satsen och starta med debuggern.

Skickades från m.sweclockers.com

Permalänk

@zaibuf: Vet inte om du hann se min EDIT, men jag ändrade min while till (antal_flaskor != 24) och då funkade if-satsen. Men problemet som uppstår är att det lagras inte i vektorn(tror jag?)
När jag sedan får upp grund menyn och ska skriva ut innehållet av backen, så får jag ut 24 "tom plats"

Permalänk
Medlem

@mattin123: Att du får ut "tom plats" är inte så konstigt, begrunda följande rader i din Add_soda-metod:

string addsodameny1 = null; flaskor[antal_flaskor] = addsodameny1; // lagrar svaren i min vektor

Ett sätt att korta ner koden är förresten att lagra namnen på dryckerna i en array:

const string[] drycker = new string[] { "Coca-Cola", "Fanta", "Pepsi", etc };

Sen kan du slå upp namnet på drycken som valts i arrayen, istället för att ha en lång switch-sats med ett case för varje dryck. Om du gör det på rätt sätt så ska du kunna ändra dryckerna som går att välja på genom att endast ändra på arrayen. Det kanske är lite överkurs, men det är så man hade löst det "på riktigt" i all fall.

Permalänk
Skrivet av perost:

@mattin123: Att du får ut "tom plats" är inte så konstigt, begrunda följande rader i din Add_soda-metod:

string addsodameny1 = null; flaskor[antal_flaskor] = addsodameny1; // lagrar svaren i min vektor

Ett sätt att korta ner koden är förresten att lagra namnen på dryckerna i en array:

const string[] drycker = new string[] { "Coca-Cola", "Fanta", "Pepsi", etc };

Sen kan du slå upp namnet på drycken som valts i arrayen, istället för att ha en lång switch-sats med ett case för varje dryck. Om du gör det på rätt sätt så ska du kunna ändra dryckerna som går att välja på genom att endast ändra på arrayen. Det kanske är lite överkurs, men det är så man hade löst det "på riktigt" i all fall.

Jag misstänkte att dom koderna är felen i varför jag får ut tom plats, men vet ej hur jag ska fixa dom. Men jag ska försöka, återkommer senare under dagen. Samma med att lagra dom i en vektor. Men om jag lagrar dom i en vektor så måste väl användaren isåfall skriva namnet på drycken för att det ska kopplas ihop med dryckerna i vektorn? Nu räcker det med en siffra.

Uppskattar verkligen eran hjälp @perost och @zaibuf, ser att ni är aktiva i alla programmerings trådar och hjälper alla nybörjare utan att känna att det är jobbigt. Jättesnällt

Permalänk
Medlem
Skrivet av mattin123:

Jag misstänkte att dom koderna är felen i varför jag får ut tom plats, men vet ej hur jag ska fixa dom. Men jag ska försöka, återkommer senare under dagen. Samma med att lagra dom i en vektor. Men om jag lagrar dom i en vektor så måste väl användaren isåfall skriva namnet på drycken för att det ska kopplas ihop med dryckerna i vektorn? Nu räcker det med en siffra.

För att förtydliga så är alltså felet att du alltid lagrar null i arrayen, oavsett vad användaren matar in. Det enda du gör i din switch-sats är att skriva ut namnet på drycken som valts.

Och när det gäller att spara namnet i en vektor så verkar du fått det lite bakvänt. Arrayer indexeras ju med just siffror, d.v.s. arr[0] är första elementet, arr[1] är andra, etc. Så man kan helt enkelt se det som användaren skriver in som ett array-index + 1, men man måste förstås se till att indexet är giltigt också (d.v.s. mellan 0 och längden på arrayen - 1).

Gör man på det sättet så behöver man egentligen inte spara strängar i läskbacken heller, det skulle räcka med att bara spara indexen. Då kan man t.ex. ändra namnet på en läsk genom att bara ändra på dess element i arrayen, istället för att behöva gå igenom hela läskbacken och ändra på varje läsk separat. I just ditt fall så behöver du dock uppfylla kraven för uppgiften, så säger uppgiften att du ska lagra läskerna som strängar i en vektor så är det bäst att göra det även om det finns bättre lösningar.

Skrivet av mattin123:

Uppskattar verkligen eran hjälp @perost och @zaibuf, ser att ni är aktiva i alla programmerings trådar och hjälper alla nybörjare utan att känna att det är jobbigt. Jättesnällt

Tack, jag jobbar deltid som C#-debugger känns det som ibland. Vilket är lite ironiskt med tanke på att jag inte skrivit en rad C# sen typ Programmering 2 i gymnasiet för ~15 år sedan

Permalänk
Skrivet av perost:

För att förtydliga så är alltså felet att du alltid lagrar null i arrayen, oavsett vad användaren matar in. Det enda du gör i din switch-sats är att skriva ut namnet på drycken som valts.

Och när det gäller att spara namnet i en vektor så verkar du fått det lite bakvänt. Arrayer indexeras ju med just siffror, d.v.s. arr[0] är första elementet, arr[1] är andra, etc. Så man kan helt enkelt se det som användaren skriver in som ett array-index + 1, men man måste förstås se till att indexet är giltigt också (d.v.s. mellan 0 och längden på arrayen - 1).

Gör man på det sättet så behöver man egentligen inte spara strängar i läskbacken heller, det skulle räcka med att bara spara indexen. Då kan man t.ex. ändra namnet på en läsk genom att bara ändra på dess element i arrayen, istället för att behöva gå igenom hela läskbacken och ändra på varje läsk separat. I just ditt fall så behöver du dock uppfylla kraven för uppgiften, så säger uppgiften att du ska lagra läskerna som strängar i en vektor så är det bäst att göra det även om det finns bättre lösningar.

Tack, jag jobbar deltid som C#-debugger känns det som ibland. Vilket är lite ironiskt med tanke på att jag inte skrivit en rad C# sen typ Programmering 2 i gymnasiet för ~15 år sedan

Tack för tipset! Ändrade lite i koden, dock två andra problem som uppstår, haha! Misstänker att du ser felen direkt din jävel hahahhaha! men iallafall, här är koden.

public void Add_soda() // Här kommer man om man valt case nr 1, vilket är att man får skriva in sina drycker. { Console.WriteLine(""); Console.WriteLine("Du får nu skriva in vilka drycker du vill ha i backen tills den är full:"); // Skriver ut text och ber användaren skriva drycken. int addsodameny = 0; do { Console.WriteLine("1: Coca-Cola"); // skriver ut alternativen för flaska Console.WriteLine("2: Fanta"); Console.WriteLine("3: Pepsi"); Console.WriteLine("4: Öl"); Console.WriteLine("5: Redbull"); Console.WriteLine("6: Cider"); Console.WriteLine("7: Vatten"); try { addsodameny = int.Parse(Console.ReadLine()); } catch { Console.WriteLine(""); Console.WriteLine("Inget av alternativ var andra tecken än siffror, försök igen."); Console.WriteLine(""); continue; } string addsodameny1 = Console.ReadLine(); flaskor[antal_flaskor] = addsodameny1; // lagrar svaren i min vektor antal_flaskor++; // för varje svar jag skriver så ökar det med 1 i vektorn hela vägen till 24 switch (addsodameny) // Skapar en meny, som skriver ut vilken dryck användaren väljer tills backen blir full. { case 1: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Coca-Cola"); Console.WriteLine("-------------------"); break; case 2: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Fanta"); Console.WriteLine("-------------------"); break; case 3: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Pepsi"); Console.WriteLine("-------------------"); break; case 4: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Öl"); Console.WriteLine("-------------------"); break; case 5: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Redbull"); Console.WriteLine("-------------------"); break; case 6: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Cider"); Console.WriteLine("-------------------"); break; case 7: Console.WriteLine("-------------------"); Console.WriteLine("Du valde Vatten"); Console.WriteLine("-------------------"); break; default: // om man skriver siffror ovanför 1-7 så skrivs detta ut. Console.WriteLine("-------------------"); Console.WriteLine("Siffor mellan 1-7 min vän"); Console.WriteLine("-------------------"); break; } } while (antal_flaskor != 24); if (antal_flaskor == 24) // När backen är full ska detta meddelandet spelas och då ska man komma tillbaka till den vanliga menyn { Console.WriteLine(""); Console.WriteLine("Backen är nu full, vänligen välj ett av alternativen nedan om du vill vidareforska backen:"); Console.WriteLine(""); }

Felen som uppstår är
1. Jag behöver mata in dryck numret två gånger innan programmet förstår: alltså trycka "3" sen enter, sen "3" igen och enter för att få fram "du har valt pepsi".
2. Allting lagras i vektorn som det skall även om man får trycka två gånger, men det är siffrorna som skrivs ut när jag vill få ut innehållet. Löser sig problemet om jag ändrar från en switch till en vektor som du tipsade mig till?

Permalänk
Medlem

1. Efter en snabb koll av koden så kör du Console.ReadLine() två gånger och därför måste du mata in det två gånger. Den andra gången du kör Console.readline borde du kunna optimera bort.

string addsodameny1 = Console.ReadLine(); flaskor[antal_flaskor] = addsodameny1; // lagrar svaren i min vektor

Ovanstående rader borde du kunna optimera genom att istället för att skapa en ny variabel som heter "addsodamenu1" så borde du kunna använda din första variabel som heter "addsodamenu" och lägga till den variabeln i vektorn istället för att lägga till "addsodamenu1".

Permalänk
Medlem
Skrivet av mattin123:

1. Jag behöver mata in dryck numret två gånger innan programmet förstår: alltså trycka "3" sen enter, sen "3" igen och enter för att få fram "du har valt pepsi".

Du läser in indata två gånger nu, så det är inte så konstigt. Jag rekommenderar starkt att du sätter en breakpoint i början av Add_soda och stegar igenom metoden så att du ser vad som händer. Hur roligt det än är att vara din debugger så kommer du lära dig betydligt mer av att använda den riktiga debuggern

Här är en kort genomgång av hur debuggern fungerar.

Skrivet av mattin123:

2. Allting lagras i vektorn som det skall även om man får trycka två gånger, men det är siffrorna som skrivs ut när jag vill få ut innehållet. Löser sig problemet om jag ändrar från en switch till en vektor som du tipsade mig till?

Nej, problemet är återigen att koden gör precis vad du säger att den ska göra, d.v.s. lagrar siffran som användaren matat in i vektorn. Börja med att fixa koden som den är nu innan du blandar in en vektor till.

Sen måste jag säga att addsodameny1 är ett rätt dåligt variabelnamn. Jag skulle föreslå att du ändrar addsodameny till t.ex. soda_index, och addsodameny1 till t.ex. soda_name. Variabelnamn som beskriver vad variablerna faktiskt innehåller gör att koden blir lättare att följa, och det minskar risken för att man använder en variabel fel.

Permalänk
Skrivet av perost:

Du läser in indata två gånger nu, så det är inte så konstigt. Jag rekommenderar starkt att du sätter en breakpoint i början av Add_soda och stegar igenom metoden så att du ser vad som händer. Hur roligt det än är att vara din debugger så kommer du lära dig betydligt mer av att använda den riktiga debuggern

Här är en kort genomgång av hur debuggern fungerar.
Nej, problemet är återigen att koden gör precis vad du säger att den ska göra, d.v.s. lagrar siffran som användaren matat in i vektorn. Börja med att fixa koden som den är nu innan du blandar in en vektor till.

Sen måste jag säga att addsodameny1 är ett rätt dåligt variabelnamn. Jag skulle föreslå att du ändrar addsodameny till t.ex. soda_index, och addsodameny1 till t.ex. soda_name. Variabelnamn som beskriver vad variablerna faktiskt innehåller gör att koden blir lättare att följa, och det minskar risken för att man använder en variabel fel.

Ja, jag får göra det. Kändes som att jag var så nära till ett fungerande program, men hade så fel. hahaha!
Återkommer med hur det gick snart.
Ang variabelnamnet var bara för att se om det fungerar eller inte, tänkt ändra det sen min fantasi är kass så det fick bli en 1 bara.

Permalänk
Skrivet av Skyflyer:

1. Efter en snabb koll av koden så kör du Console.ReadLine() två gånger och därför måste du mata in det två gånger. Den andra gången du kör Console.readline borde du kunna optimera bort.

string addsodameny1 = Console.ReadLine(); flaskor[antal_flaskor] = addsodameny1; // lagrar svaren i min vektor

Ovanstående rader borde du kunna optimera genom att istället för att skapa en ny variabel som heter "addsodamenu1" så borde du kunna använda din första variabel som heter "addsodamenu" och lägga till den variabeln i vektorn istället för att lägga till "addsodamenu1".

Ändrar jag den koden jag har från

try { addsodameny = int.Parse(Console.ReadLine()); } catch { Console.WriteLine(""); Console.WriteLine("Inget av alternativ var andra tecken än siffror, försök igen."); Console.WriteLine(""); continue; } string addsodameny1 = Console.ReadLine(); flaskor[antal_flaskor] = addsodameny1;

Till

try { string addsodameny = Console.ReadLine(); } catch { Console.WriteLine(""); Console.WriteLine("Inget av alternativ var andra tecken än siffror, försök igen."); Console.WriteLine(""); continue; } int addsodameny1 = Convert.ToInt32(addsodameny); flaskor[antal_flaskor] = addsodameny1;

Och jag knappar in, "3" eller vilken siffra som helst så kommer "default"-koden upp. "Att jag bara får knappa in siffror mellan 1-7 vilket jag gör, men misstänker att programmet tror att jag knappar in en "string", vilket jag gör men jag förvandlar den till en int. (?)

Permalänk
Skrivet av Skyflyer:

1. Efter en snabb koll av koden så kör du Console.ReadLine() två gånger och därför måste du mata in det två gånger. Den andra gången du kör Console.readline borde du kunna optimera bort.

string addsodameny1 = Console.ReadLine(); flaskor[antal_flaskor] = addsodameny1; // lagrar svaren i min vektor

Ovanstående rader borde du kunna optimera genom att istället för att skapa en ny variabel som heter "addsodamenu1" så borde du kunna använda din första variabel som heter "addsodamenu" och lägga till den variabeln i vektorn istället för att lägga till "addsodamenu1".

När jag gör som du säger att ska använda min första variabel addsodameny vilket jag gjorde först för att det är mest logiskt så får jag felmeddelandet, "Cannot implicitly convert type 'int' to 'string'". Det är därför jag lägger till den raden med string addsodameny1

Har nu fixat det genom att lägga till efter addsodameny .ToString();

Problemet med att innehållet skrivs ut med siffror istället för dryckornas namn kvarstår. Återkommer om jag löser