Trädvy Permalänk
Medlem
Registrerad
Apr 2013

Hjälp c#

Läser programmering 1 på Distans och har läst igenom de kapitel i boken som de hänvisar till, även tittat på två olika youtube profiler som går igenom samma kapitel.. Ska nu göra mina första uppgifter och ja, hej panik!! detta jag läst och lyssnat på ska användas i praktiken. Lättare sagt än gjort.!

Kursen baserar sig på C# och uppgifterna är följande:

1:
Denna uppgift handlar (minst) om
 Två variabeltyper
 Matematiska uträkningar
 Hantera utskrifter
I denna uppgift ska du fråga användaren efter personens förnamn och efternamn,
samt vidare personens ålder. Dessa värden ska lagras i lämpliga variabler.
Därefter ska det skrivas ut hur många år det är kvar till pensionen, tillsammans med
användarens för- och efternamn. Det innebär att om personen skriver in åldern 25 så ska det stå att personen
har 40 år kvar till pensionen (65-25).
Tänk på hur utskrifterna ser ut – programmet ska se trevligt ut helt enkelt.
Utskriften i slutet kan exempelvis se ut så här:
Hej Martin Persson! Det är nu 22 år kvar till du går i pension.

2:

Denna uppgift handlar om flyttal och att avrunda sådana.

Uppgiften går ut på att du ska be användaren skriva in ett tal med decimaler.

Därefter ska ni be användaren skriva in hur många decimaler användaren vill ha.

Din kod ska avrunda talet enligt ovan, men också med ett på förbestämt antal decimaler (exempelvis tre).

Exempel:

Användaren skriver in talet 1,3457322 och 5 för antal decimaler. Talet redovisas dels med så många decimaler som användaren valt (1,34573), samt även med tre decimaler (1,346).

Ni kan alltså prova att jobba med avrundning på mer än ett sätt.

Detta är en uppgift där ni delvis får söka lösning på problemet på nätet eller andra böcker. Många är vana vid att söka på nätet men det är viktigt att alla vänjer sig vid detta arbetssätt.

3:
Följande moment ingår i denna uppgift:
1. Slumptal
2. Heltal
3. Loop med do och while
4. Villkor med if och else
Beskrivning
Användaren ska gissa ett tal som slumpats fram.
När programmet startar ska lämplig text skrivas ut till användaren och ett tal slumpas i bakgrunden.
Detta tal ska vara mellan 1 och 100, och detta tal ska lagras i en variabel.
För att slumpa ett tal mellan 1 och 100 används följande kod:
Random randomerare = new Random();
int slump_tal = randomerare.Next(1, 100);
Notera att du inte behöver begripa den koden ännu, men längre fram och med mer kunskap kommer
du också förstå vad som händer i koden. Så i detta läge får man helt enkelt svälja att det är så man
skriver för att lagra ett slumptal mellan 1 och 100 i variabeln slump_tal.
Prova gärna att göra ett enkelt program som skriver ut 10 olika slumptal i en loop för
att dels öva på loopar och dels se att slumptalet fungerar som det ska.
Nu ska en loop inledas och i den loopen ska användaren få skriva in ett tal.
Om talet är mindre än det hemliga slumpade talet ska användaren noteras om detta, och samma sak
om talet är för stort.
Loopen ska snurra ända till användaren lyckas skriva in det hemliga talet. Då ska en lämplig text
skrivas ut.
Tänk på att göra ett snyggt (textmässigt) och tydligt program.
Göra det svårare
Du får gärna föra uppgiften lite svårare om du vill. Här kommer några förslag:
1. Håll reda på hur många gånger du behövde gissa innan du prickar rätt och skriv ut detta
2. Om man är nära att gissa rätt kan man få en text att det ”bränner” eller något liknande. Det
kan vara om man är ett visst antal nummer ifrån det hemliga talet.

Trädvy Permalänk
Medlem
Registrerad
Apr 2013

Jag har kommit en bit in på första uppgiften men problemet är om någon skriver in åldern med annat än siffror. Då kraschar programmet, det jag vill och har försökt med är att lägga in en else if sats där den frågar om inmatning är siffror. om det är false så ska den skriva ex: "i siffror sa jag!" och sen ställa frågan om ålder igen. Måste detta göras med en loop eller ska det räcka med en else if/bool ala true/false hur gör jag isf.???

min kod ser ut enligt följande:

//Enkelt program som frågar efter namn och räknar ut år kvar till pension. Console.Write("Skriv in ditt Förnamn: "); //frågar efter Förnamn string namn = Console.ReadLine(); Console.Write("Skriv in ditt efternamn: "); //frågar efter Efternamn string efternamn = Console.ReadLine(); string heltnamn = "Hej " + namn + " " + efternamn; // SKriver ut fullständigt namn. Console.WriteLine(heltnamn); Console.Write("Skriv din ålder med siffror:"); //frågar efter ålder string år = Console.ReadLine(); int ålder = Convert.ToInt32(år); if (ålder < 65) { Console.WriteLine("Du har " + (65 - ålder) + " år kvar till pension, jobba på!!"); //skriver ut hur många år du har kvar till pension Console.ReadLine(); } else if (ålder >= 65) { Console.WriteLine("Grattis du har redan gått i pension"); // berättar att du är över 65 och redan har gått i pension Console.ReadLine(); } } } }

Trädvy Permalänk
Medlem
Registrerad
Okt 2012

@yepsson:
Hej.
Jag gissar på att ditt program kraschar på raden "int ålder = Convert.ToInt32(år);" om år inte är ett tal.

Jag tycker du ska börja titta på try-catch (i kombination med en loop) vilket du kommer använda mycket i programeringsyrket.

Drar tillbaks mitt inlägg..
En tryparse som nämns nedan är förstås ett mycket bättre alternativ.

Trädvy Permalänk
Medlem
Registrerad
Apr 2013
Skrivet av FrazzorXx:

@yepsson:
Hej.
Jag gissar på att ditt program kraschar på raden "int ålder = Convert.ToInt32(år);" om år inte är ett tal.

Jag tycker du ska börja titta på try-catch (i kombination med en loop) vilket du kommer använda mycket i programeringsyrket.

Precis det som är felet och jag lyckas inte lösa det :(:(

Försökt med flera saker. Funderar på om loop är mitt enda val? men vet isådanafall inte riktigt hur det ska utföras. Hjälp tas gärna emot. ÄR annars nöjd med min kod och det som jag vill avsluta denna uppgift är just det om något skriver sin ålder med bokstav eller liknande att den då säger: "Med siffror om jag får be!" och sedan ställer ålder frågan igen! PLZ help <3

Trädvy Permalänk
Medlem
Plats
Borlänge
Registrerad
Jan 2009

string år = Console.ReadLine();
int ålder = Convert.ToInt32(år);

Nu kan jag inte C# men är det inte möjligt att läsa in ett heltal direkt istället för att konvertera?

Trädvy Permalänk
Medlem
Plats
Örebro
Registrerad
Jan 2011

@Legacy_wow_jon:

ReadLine blir alltid en sträng så konverteringen är nödvändig, men den behöver inte mellanlagras i variabel.

Problemet är fortfarande att det saknas en try-catch som tar hand om andra tecken som inte är siffror.

He who hasn't hacked assembly language as a youth has no heart. He who does so as an adult has no brain.
~John Moore

Trädvy Permalänk
Medlem
Registrerad
Nov 2016

Googla på Int32.TryParse, lite struligare att använda men du slipper ha en try catch

Trädvy Permalänk
Medlem
Registrerad
Okt 2012
Trädvy Permalänk
Medlem
Registrerad
Apr 2013
Skrivet av Anaii:

@Legacy_wow_jon:

ReadLine blir alltid en sträng så konverteringen är nödvändig, men den behöver inte mellanlagras i variabel.

Problemet är fortfarande att det saknas en try-catch som tar hand om andra tecken som inte är siffror.

precis. har försökt använda detta men misslyckats fatalt..

Trädvy Permalänk
Medlem
Registrerad
Apr 2013
Skrivet av furbel:

Googla på Int32.TryParse, lite struligare att använda men du slipper ha en try catch

haha fattar typ hur det fungerar. försökt skriva in det i min kod men får 100000 felmeddelanden.. ingen av er skulle vilja kopiera min kod med det tillagt? så jag förstår hur och varför?

mvh

edit:

löste det. haha det var som jag tidigare provat men hade missat och skrivit ut saker dubbelt :D:D tack

Trädvy Permalänk
Medlem
Registrerad
Dec 2013

Kan ju vidare rekommendera just ang TryParse lösningar att man använder en while loopar.

Console.WriteLine("Vänligen skriv in ett decimal tal"); while (true) if (double.TryParse(Console.ReadLine(), out Base)) break; else Console.WriteLine("Det där vart inte ett giltligt decimal tal, vänligen försök igen.");

lite tydligare sätt att skriva det på i början (eller om man tillhör dem som älskar sina { }

while (true) { if (double.TryParse(Console.ReadLine(), out Base)) { break; } else { Console.WriteLine("Det där vart inte ett giltligt decimal tal, vänligen försök igen."); } }

Detta forcerar användaren att skriva något som programmet kan tyda som en godkänd (i detta fallet) double.

Trädvy Permalänk
Medlem
Registrerad
Okt 2012

Eller för dem som föredrar så få rader kod som möjlig

Int år; while (!int.TryParse(Console.ReadLine (), out år)) { Console.WriteLine("Ogiltigt tal"); }

Trädvy Permalänk
Medlem
Registrerad
Dec 2013
Skrivet av FrazzorXx:

Eller för dem som föredrar så få rader kod som möjlig

Int år; while (!int.TryParse(Console.ReadLine (), out år)) { Console.WriteLine("Ogiltigt tal"); }

Njo personligen skulle jag kört liknande fast utan måsvingarna men tänkte mest för någon som verkar vara på en gymnasial starter nivå så kanske det är lite väl otydligt?

Trädvy Permalänk
Medlem
Registrerad
Apr 2013

tjabba, här igen, håller på med min slutuppgift. en simulerad läskback med lite olika val.. efter att ha gett upp totalt om att skapa färdiga klasser och objekt efter att ha fatalt misslyckats och slitit mitt hår i timmar så tänkte jag göra det lättaste möjligast, men även här misslyckas jag nu tydligen?! min kod funkar till en början som den ska,, men något händer när den lägger till mina "flaskor" i min "läskback" den multiplicerar på något konstigt vis, samma sak när jag ska räkna ut det totala värdet.. PLS help.. ska lämnas in idag,.. KODEN:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace läskback { class Sodacrate { private string[] min_Back = new string[24]; private int antal_flaskor = 0; public int sum = 0; int värde = 5; public void Run() { int temp = 0; Console.WriteLine("Välkommen till denna awzum Läskbackssimulator!!"); do { Console.WriteLine(); Console.WriteLine("Vad vill du göra?!:"); Console.WriteLine(); Console.WriteLine("1: Lägg till en flaska i backen?!"); Console.WriteLine("2: Visa innehållet i din back?!"); Console.WriteLine("3: Räkna ut det totala värdet av din back?!"); Console.WriteLine("4: Stänga av denna awzuuum simulator?!"); try { temp = int.Parse(Console.ReadLine()); } catch { Console.WriteLine(" gör ett val!"); continue; } switch (temp) { case 1: add_soda(); break; case 2: print_crate(); break; case 3: calc_total(); break; case 4: Console.Clear(); Console.WriteLine("Avslutar!!! :("); temp = 0; break; default: Console.WriteLine("Ett nummer mellan 1-4 är du snäll"); break; } } while (temp != 0); } public void add_soda() { Console.Clear(); int temp = 0; do { Console.WriteLine("Vad vill du stoppa i backen!?:"); Console.WriteLine("1: Pripps"); Console.WriteLine("2: Cocacola"); Console.WriteLine("3: Fanta"); Console.WriteLine("4: Falcon"); Console.WriteLine("5: Loka"); Console.WriteLine("6: Återgår till förra menyn"); string val = Console.ReadLine(); string typ = ""; switch (val) { case "1": typ = "Pripps"; break; case "2": typ = "cocacola"; break; case "3": typ = "Fanta"; break; case "4": typ = "Falcon"; break; case "5": typ = "Loka"; break; case "6": Console.WriteLine("Återgår till förra menyn!"); temp = 0; break; default: typ = "Gör ett val mellan 1-6 är du snäll! "; break; } Console.WriteLine(typ + " lades till i backen"); for (int j = 0; j < min_Back.Length; j++) { if (antal_flaskor == 24) { Console.WriteLine("Backen är full!"); } else { antal_flaskor++; if (min_Back[j] == null) { min_Back[j] = typ; break; } } } } while (temp != 0); } public void print_crate() { foreach (string dryck in min_Back) { if (dryck != null) Console.WriteLine(dryck); else Console.WriteLine("Ledig Plats!"); } } public void calc_total() { int sum = 0; for (int i = 0; i < antal_flaskor; i++) sum = antal_flaskor * värde; { Console.WriteLine(); Console.WriteLine("Din backs värde är: " + sum + " kr!"); Console.WriteLine(); } } } class Program { public static void Main(string[] args) { var sodacrate = new Sodacrate(); sodacrate.Run(); Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } }

lagade code-tagg
Trädvy Permalänk
Medlem
Plats
Kungsbacka
Registrerad
Aug 2006

@yepsson:

Där är orsaken varför antal_flaskor blir större när du lägger till en flaska.

Den loopar igenom antalet flaskor, om antal flaskor inte är 24, så kör den antal_flaskor++ för varje flaska i backen, så kommer bli 1, 3, 6, 10 och så vidare.

Rekommendation, gör antal_flaskor++ innan for loopen. Annars såg det ut att funka tycker jag.

for (int j = 0; j < min_Back.Length; j++) { if (antal_flaskor == 24) { Console.WriteLine("Backen är full!"); } else { antal_flaskor++; if (min_Back[j] == null) { min_Back[j] = typ; break; } } }

Nu vet jag inte hur länge du hållt på med programmering, men om du inte använt breakpoints än så bör du börja och lära dig det, väldigt nyttig funktion för just sådana här simpla fel, den kommer bli din bästa vän i alla lägen när något går fel, oavsett litet eller stort.

ASUS Crosshair VI Hero // AMD Ryzen 7 1700 @3.85GHz @ 1.35V // MSi RX 480 GAMING X // G.Skill Flare X 2x8GB 3200MHz // Noctua NH-D15// Samsung 960 EVO 1TB // Fractal Design Define R5 // 2x ASUS MG278Q

Trädvy Permalänk
Medlem
Registrerad
Apr 2013
Skrivet av Kokefa:

@yepsson:

Där är orsaken varför antal_flaskor blir större när du lägger till en flaska.

Den loopar igenom antalet flaskor, om antal flaskor inte är 24, så kör den antal_flaskor++ för varje flaska i backen, så kommer bli 1, 3, 6, 10 och så vidare.

Rekommendation, gör antal_flaskor++ innan for loopen. Annars såg det ut att funka tycker jag.

for (int j = 0; j < min_Back.Length; j++) { if (antal_flaskor == 24) { Console.WriteLine("Backen är full!"); } else { antal_flaskor++; if (min_Back[j] == null) { min_Back[j] = typ; break; } } }

Nu vet jag inte hur länge du hållt på med programmering, men om du inte använt breakpoints än så bör du börja och lära dig det, väldigt nyttig funktion för just sådana här simpla fel, den kommer bli din bästa vän i alla lägen när något går fel, oavsett litet eller stort.

uppgiften ska som sagt lämnas in idag haha. som du ser har jag även försökt göra den andra menyn i en loop vilket jag vill ska fortsätta loopa tills man väljer case 6 som gör att man återgår till första menyn.. alltså att man kan fortsätta lägga in flaskor allt efter varandra ist. för att behöva välja att man vill lägga till flaska i första menyn igen,, får det ej att lira snyggt... SAMT,, vill ha en case dä'r jag fyller hela backen på en gång med slumpade typer av mina förbestämda flaskor.. help pls <3

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2010
Skrivet av yepsson:

som du ser har jag även försökt göra den andra menyn i en loop vilket jag vill ska fortsätta loopa tills man väljer case 6 som gör att man återgår till första menyn.. alltså att man kan fortsätta lägga in flaskor allt efter varandra ist. för att behöva välja att man vill lägga till flaska i första menyn igen,, får det ej att lira snyggt...

I metoden add_soda() initierar du variabeln temp som 0, den variabeln (som du dessutom använder i while-checken) tilldelas aldrig något annat värde än 0, därför faller du alltid ur do-whilen.

Angående ditt andra problem, vad har du försökt?

Trädvy Permalänk
Medlem
Registrerad
Apr 2013
Skrivet av Nissan8:

I metoden add_soda() initierar du variabeln temp som 0, den variabeln (som du dessutom använder i while-checken) tilldelas aldrig något annat värde än 0, därför faller du alltid ur do-whilen.

Angående ditt andra problem, vad har du försökt?

nu ser koden ut såhär.. har löst det du påpekar,, MEN, när jag väljer caset som ska avsluta loopen för att gå tillbaka till huvudmenyn, så räknar vektorn som att även det caset lägger till en plats i vektorn,, inte kommit runt detta, Dock lyckats på fulknep ta bort att den ska räkna med den "Priset".. Utöver det försöker jag även nu lyckas med valet att fylla hela backen med slumpade flaskor.. lyckas inte heller där.. tidigare bara slumpat in heltal i en vektor,, koden:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace läskback { class Sodacrate { private string[] min_Back = new string[24]; private int antal_flaskor = 0; public int sum = 0; int värde = 7; public void Run() { int temp = 0; Console.WriteLine("Välkommen till denna awzum Läskbackssimulator!!"); do { Console.WriteLine(); Console.WriteLine("Vad vill du göra?!:"); Console.WriteLine(); Console.WriteLine("1: Lägg till en flaska i backen?!"); Console.WriteLine("2: Visa innehållet i din back?!"); Console.WriteLine("3: Räkna ut det totala värdet av din back?!"); Console.WriteLine("4: Slumpa fram en fylld back!"); Console.WriteLine("5: Stänga av denna awzuuum simulator?!"); try { temp = int.Parse(Console.ReadLine()); } catch { Console.WriteLine(" gör ett val!"); continue; } switch (temp) { case 1: add_soda(); break; case 2: print_crate(); break; case 3: calc_total(); break; case 4: slumpa_back(); break; case 5: Console.Clear(); Console.WriteLine("Avslutar!!! :("); temp = 0; break; default: Console.WriteLine("Ett nummer mellan 1-4 är du snäll"); break; } } while (temp != 0); } public void add_soda() { Console.Clear(); int temp = 0; do { Console.WriteLine("Vad vill du stoppa i backen!?:"); Console.WriteLine("1: Pripps"); Console.WriteLine("2: Cocacola"); Console.WriteLine("3: Fanta"); Console.WriteLine("4: Falcon"); Console.WriteLine("5: Loka"); Console.WriteLine("0: Återgår till förra menyn"); string val = Console.ReadLine(); string typ = ""; switch (val) { case "0": Console.WriteLine("Återgår till förra menyn!"); temp = 1; antal_flaskor--; break; case "1": typ = "Pripps"; break; case "2": typ = "cocacola"; break; case "3": typ = "Fanta"; break; case "4": typ = "Falcon"; break; case "5": typ = "Loka"; break; default: typ = "Gör ett val mellan 1-6 är du snäll! "; break; } Console.Clear(); Console.WriteLine(typ + " lades till i backen"); antal_flaskor++; for (int j = 0; j < min_Back.Length; j++) { if (antal_flaskor == min_Back.Length) { Console.WriteLine("Backen är full!"); } else { if (min_Back[j] == null) { min_Back[j] = typ; break; } } } } while (temp == 0); } public void print_crate() { Console.Clear(); foreach (string dryck in min_Back) { if (dryck != null) Console.WriteLine(dryck); else Console.WriteLine("Ledig Plats!"); } } public void calc_total() { int sum = 0; for (int i = 0; i < antal_flaskor; i++) sum = antal_flaskor * värde; { Console.WriteLine(); Console.WriteLine("Din backs värde är: " + sum + " kr!"); Console.WriteLine(); } } public void slumpa_back() { string[] flaskor = min_Back; Random rnd = new Random(); string randomflaska = "Pripps, Cocacola, Fanta, Falcon, Loka"; for (int i = 0; i < min_Back.Length i++) ; { randomflaska += min_Back[r.next(0, 5)].ToString(); } } } class Program { public static void Main(string[] args) { var sodacrate = new Sodacrate(); sodacrate.Run(); Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } }

Trädvy Permalänk
Medlem
Registrerad
Apr 2013

kan jag samtidigt när jag ska skriva in vad för dryckes typ som ska läggas in, fråga efter hur många? och smidigt lagra det som en int och lägga till så flaskor många i vektorn, typ
1, cola väljs och 3st.

antalflaskor +3; ist för ++

Trädvy Permalänk
Medlem
Plats
Kungsbacka
Registrerad
Aug 2006

@yepsson:

Som koden är nu så kommer metoden add_soda() alltid kör igenom all kod även om du trycker 0.

En lösning är att göra en if sats runt den här biten av koden. Där du har en bool som är instancerad sann (bool runCode = true), när du trycker 0 så sätter du bara runCode till false så undviker du att den biten av koden körs. Detta gör att du kan ta bort din antal_flaskor-- också.

Console.Clear(); Console.WriteLine(typ + " lades till i backen"); antal_flaskor++; for (int j = 0; j < min_Back.Length; j++) { if (antal_flaskor == min_Back.Length) { Console.WriteLine("Backen är full!"); } else { if (min_Back[j] == null) { min_Back[j] = typ; break; } } }

Din slump funktion är lite speciell just nu, den funkar inte alls vad jag kan se.
Något sådant tänker jag mig, nu har jag inte testat koden, vet inte om den funkar, men i den stilen.

public void slumpa_back() { int tommaPlatser = 24 - min_back.Length; Random rnd = new Random(); string[] randomflaska = new string[] { "Pripps", "Coca Cola", "Fanta", "Falcon", "Loka"} for (int i = min_back.Length- 1; i < tommaPlatser; i++) { min_Back[i] = randomflask[rnd.Next(0, 5)] } }

ASUS Crosshair VI Hero // AMD Ryzen 7 1700 @3.85GHz @ 1.35V // MSi RX 480 GAMING X // G.Skill Flare X 2x8GB 3200MHz // Noctua NH-D15// Samsung 960 EVO 1TB // Fractal Design Define R5 // 2x ASUS MG278Q

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2010

@yepsson: Metoden är problematisk på flera sätt eftersom exekveringen fortsätter efter du har valt att återgå till förra menyn. Du lägger dessutom till en tom flaska i backen varje gång du går tillbaka.

Du gör det lättast för dig själv om du inte försöker göra allt med samma metod utan istället bryter ut metoder till flera. En metod bör endast göra en sak, det gör det lättare att förstå koden och du slipper såna här roliga buggar.

För att avsluta exekveringen när man väljer 0 kan du här använda return istället för break. Detta kommer avsluta exekveringen av metoden och skicka dig tillbaka där du exekverade add_soda(), i huvudmenyn.

case "0": Console.WriteLine("Återgår till förra menyn!"); return;

edit: Du bör även se över vad som händer när du inte väljer vad du vill stoppa i backen. I nuläget läggs det ändå till en dryck med namnet "Gör ett val mellan 1-6 är du snäll!"

Trädvy Permalänk
Medlem
Plats
Kungsbacka
Registrerad
Aug 2006
Skrivet av yepsson:

kan jag samtidigt när jag ska skriva in vad för dryckes typ som ska läggas in, fråga efter hur många? och smidigt lagra det som en int och lägga till så flaskor många i vektorn, typ
1, cola väljs och 3st.

antalflaskor +3; ist för ++

Det går, du har redan sparat ner typ av flaska, gör bara en console.readline, fråga efter antal flaskor, spara ner siffran till en variabel, och loopa igenom "lägg till flaska".

if (min_Back[j] == null) { for (int i; i < console.readline; i++) min_Back[j + i] = typ; break; }

ASUS Crosshair VI Hero // AMD Ryzen 7 1700 @3.85GHz @ 1.35V // MSi RX 480 GAMING X // G.Skill Flare X 2x8GB 3200MHz // Noctua NH-D15// Samsung 960 EVO 1TB // Fractal Design Define R5 // 2x ASUS MG278Q

Trädvy Permalänk
Medlem
Registrerad
Apr 2013
Skrivet av Nissan8:

@yepsson: Metoden är problematisk på flera sätt eftersom exekveringen fortsätter efter du har valt att återgå till förra menyn. Du lägger dessutom till en tom flaska i backen varje gång du går tillbaka.

Du gör det lättast för dig själv om du inte försöker göra allt med samma metod utan istället bryter ut metoder till flera. En metod bör endast göra en sak, det gör det lättare att förstå koden och du slipper såna här roliga buggar.

För att avsluta exekveringen när man väljer 0 kan du här använda return istället för break. Detta kommer avsluta exekveringen av metoden och skicka dig tillbaka där du exekverade add_soda(), i huvudmenyn.

case "0": Console.WriteLine("Återgår till förra menyn!"); return;

edit: Du bör även se över vad som händer när du inte väljer vad du vill stoppa i backen. I nuläget läggs det ändå till en dryck med namnet "Gör ett val mellan 1-6 är du snäll!"

damn,,

sånna här småsaker som gör mig yr.. Och är redan stressad som det är haha. Hur undviker jag att min default lägger till en flaska?
Samt, menar du att det räcker att jag bara lägge till return i mitt case för att undvika att det lägga till en tom flaska??

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2010

@yepsson: Lättast hade varit att bryta ut den långa add_soda-metoden i två delar, en som sköter menyn och en som faktiskt lägger till flaskan i backen. I det fallet kan du helt enkelt köra Console.WriteLine med felmeddelandet, det är ju egentligen ingen läsk-typ.

Någon i den här stilen:

public void ShowSodaMenu() { Console.Clear(); do { Console.WriteLine("Vad vill du stoppa i backen!?:"); Console.WriteLine("1: Pripps"); Console.WriteLine("2: Cocacola"); Console.WriteLine("3: Fanta"); Console.WriteLine("4: Falcon"); Console.WriteLine("5: Loka"); Console.WriteLine("0: Återgår till förra menyn"); string val = Console.ReadLine(); switch (val) { case "0": Console.WriteLine("Återgår till förra menyn!"); return; case "1": AddSodaToCrate("Pripps"); break; case "2": AddSodaToCrate("cocacola"); break; case "3": AddSodaToCrate("Fanta"); break; case "4": AddSodaToCrate("Falcon"); break; case "5": AddSodaToCrate("Loka"); break; default: Console.WriteLine("Gör ett val mellan 1-6 är du snäll!"); break; } } while (true); } private void AddSodaToCrate(string type) { Console.Clear(); Console.WriteLine(type + " lades till i backen"); antal_flaskor++; for (int j = 0; j < min_Back.Length; j++) { if (antal_flaskor == min_Back.Length) { Console.WriteLine("Backen är full!"); } else { if (min_Back[j] == null) { min_Back[j] = type; break; } } } }

Trädvy Permalänk
Medlem
Registrerad
Apr 2013
Skrivet av Nissan8:

@yepsson: Lättast hade varit att bryta ut den långa add_soda-metoden i två delar, en som sköter menyn och en som faktiskt lägger till flaskan i backen. I det fallet kan du helt enkelt köra Console.WriteLine med felmeddelandet, det är ju egentligen ingen läsk-typ.

Någon i den här stilen:

public void ShowSodaMenu() { Console.Clear(); do { Console.WriteLine("Vad vill du stoppa i backen!?:"); Console.WriteLine("1: Pripps"); Console.WriteLine("2: Cocacola"); Console.WriteLine("3: Fanta"); Console.WriteLine("4: Falcon"); Console.WriteLine("5: Loka"); Console.WriteLine("0: Återgår till förra menyn"); string val = Console.ReadLine(); switch (val) { case "0": Console.WriteLine("Återgår till förra menyn!"); return; case "1": AddSodaToCrate("Pripps"); break; case "2": AddSodaToCrate("cocacola"); break; case "3": AddSodaToCrate("Fanta"); break; case "4": AddSodaToCrate("Falcon"); break; case "5": AddSodaToCrate("Loka"); break; default: Console.WriteLine("Gör ett val mellan 1-6 är du snäll!"); break; } } while (true); } private void AddSodaToCrate(string type) { Console.Clear(); Console.WriteLine(type + " lades till i backen"); antal_flaskor++; for (int j = 0; j < min_Back.Length; j++) { if (antal_flaskor == min_Back.Length) { Console.WriteLine("Backen är full!"); } else { if (min_Back[j] == null) { min_Back[j] = type; break; } } } }

då lär jag ändra min första switch casse meny, anropas metoden add_soda i min andra meny där?

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2010

@yepsson: Precis, du får ändra så att rätt metoder anropas. Huvudmeny anropar läskvalmenyn som i sin tur anropar metoden för att lägga till en dryck när du har gjort ditt val.

edit: add_soda() blev alltså ShowSodaMenu() och AddSodaToCrate(). Det är samma logik, den är bara uppdelad så varje metod gör sin enskilda uppgift.

Trädvy Permalänk
Medlem
Registrerad
Apr 2013
Skrivet av Kokefa:

Det går, du har redan sparat ner typ av flaska, gör bara en console.readline, fråga efter antal flaskor, spara ner siffran till en variabel, och loopa igenom "lägg till flaska".

if (min_Back[j] == null) { for (int i; i < console.readline; i++) min_Back[j + i] = typ; break; }

misslyckades, HAHA... den klagar, försökt ordna men får ej till det.. den ska ju slumpa in i min redan befinltiga vektor... där de blri struligt om man iten använmder klasser.

lyckades fasen itne heller att få till frågan om antal flaskor, får den att fråga och lägga till variablen, men får den ej att räkna med antalet i variabeln,,,

du har pm...

mvh

Trädvy Permalänk
Medlem
Registrerad
Apr 2013
Skrivet av Kokefa:

Det går, du har redan sparat ner typ av flaska, gör bara en console.readline, fråga efter antal flaskor, spara ner siffran till en variabel, och loopa igenom "lägg till flaska".

if (min_Back[j] == null) { for (int i; i < console.readline; i++) min_Back[j + i] = typ; break; }

public void add_soda() { Console.Clear(); int temp = 0; do { Console.WriteLine("Vad vill du stoppa i backen!?:"); Console.WriteLine("1: Pripps"); Console.WriteLine("2: Cocacola"); Console.WriteLine("3: Fanta"); Console.WriteLine("4: Falcon"); Console.WriteLine("5: Loka"); Console.WriteLine("0: Återgår till förra menyn"); int x = 0; string val = Console.ReadLine(); Console.WriteLine("Antal du vill lägga till?"); x = int.Parse(Console.ReadLine()); string typ = ""; switch (val) { case "0": Console.WriteLine("Återgår till förra menyn!"); return; case "1": typ = "Pripps"; break; case "2": typ = "cocacola"; break; case "3": typ = "Fanta"; break; case "4": typ = "Falcon"; break; case "5": typ = "Loka"; break; default: typ = "Gör ett val mellan 1-6 är du snäll! "; break; } Console.Clear(); Console.WriteLine(typ + " lades till i backen"); antal_flaskor++; for (int j = 0; j < min_Back.Length; j++) { if (antal_flaskor == min_Back.Length) { Console.WriteLine("Backen är full!"); } else { if (min_Back[j] == null) { min_Back[j] = typ; break; } } } } while (temp == 0); }

så långt kom jag,, vet inte hur jag ska få med det i räknaren riktigt.

Trädvy Permalänk
Medlem
Plats
Kungsbacka
Registrerad
Aug 2006

@yepsson:

switch (val) { case "0": Console.WriteLine("Återgår till förra menyn!"); return; case "1": typ = "Pripps"; break; case "2": typ = "cocacola"; break; case "3": typ = "Fanta"; break; case "4": typ = "Falcon"; break; case "5": typ = "Loka"; break; default: typ = "Gör ett val mellan 1-6 är du snäll! "; break; } Console.WriteLine("Hur många flaskor {0} vill du lägga till?", typ); int antal = int.Parse(Console.ReadLine()); Console.Clear(); Console.WriteLine(typ + " lades till i backen"); for (int j = 0; j < min_Back.Length; j++) { if (antal_flaskor == min_Back.Length) { Console.WriteLine("Backen är full!"); } else { if (min_Back[j] == null) { for (int i = 0; i < antal; i++) { min_Back[j + i] = typ; antal_flaskor++; } break; } } } } while (temp == 0);

Glömde lägga till antal_flaskor++ i rätt rad

ASUS Crosshair VI Hero // AMD Ryzen 7 1700 @3.85GHz @ 1.35V // MSi RX 480 GAMING X // G.Skill Flare X 2x8GB 3200MHz // Noctua NH-D15// Samsung 960 EVO 1TB // Fractal Design Define R5 // 2x ASUS MG278Q