Programmering 1 c# Lottouppgiften (array problem)

Permalänk

Programmering 1 c# Lottouppgiften (array problem)

Hejsan!

Sitter här men ''lotto'' uppgiften och har kört fast lite.. Uppgiften beskrivs så här:

Uppgiften handlar om lottobollar.
I denna uppgift kommer ni få arbeta med vektorer och slumptal.
Vidare kommer ni få visa att ni kan loopa (iterera) genom en vektor på ett lämpligt sätt, och för vektorer
används då ofta for- eller foreach.
Grund-funktionalitet (Betyg E):
I uppgiften ska besökaren få skriva in 10 stycken tal som lagras i en vektor.
När användaren skrivit in 10 stycken tal börjar spelet.
Nu ska ett tal slumpas fram.
Koden ska nu läsa alla tal som användaren skrivit in (i vektorn) och testa tal för
tal mot eventuella matchningar. Får man en matchning har man vunnit, d.v.s.
att talet i vektorn är lika med talet som slumpats fram.

Eftersom jag är lite sent ute med att göra denna uppgift har jag bestämt mig för att stanna på betyg E så tar inte med hela uppgiften
(om ingen här vill ha hela...?)

so so so so,
Jag är klar med slump tal och inmatningen av värden till vektorn med hjälp av for loop. Men det jag fastnar på är att jämföra talen i vektorn och det slumpade talet. trodde att det skulle vara enkelt att göra med if sats men nej? Tänkte även göra det lite fint med att använda foreach för att skriva ut alla valda talen och sen jämföra men då är jag ju tillbaka på samma problem.. Har googlat, och läst i boken men jag hittar inte en lösning, vad f*n är det jag missar?????

Om jag varit otydlig i min förklaring så säg bara till!
Tack på förhand!

Permalänk
Medlem

Lite kod hade underlättat felsökningen ☺️
Använd [ code] [ /code]

Skickades från m.sweclockers.com

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk

okej, skäms över hur den ser ut just nu så döm mig inte för hårt xD

using System; namespace lotto { class Program { public static void Main(string[] args) { Random randomare = new Random(); int Slumptal = randomare.Next(0, 26); int[] ValdaNummer = new int[10]; Console.WriteLine("Hej och välkommen till lotto!"); Console.WriteLine("Du ska nu få skriva in 10 nummer (mellan 1 och 25) som kommer vara dina lotto nummer"); for (int x = 0; x < ValdaNummer.Length; x++) { Console.WriteLine("Vänligen skriv ett nummer: "); try { ValdaNummer[x] = int.Parse(Console.ReadLine()); } catch (Exception) { Console.WriteLine("\n" + "Skriv bara in heltal tack!" + "\n"); continue; } if (ValdaNummer[x] <1 || ValdaNummer[x] >25) { Console.WriteLine("Bara nummer mellan 1 och 25!"); } } Console.WriteLine("Det här är dina 10 olika nummer: "); foreach (int xNr in ValdaNummer) { Console.WriteLine(xNr); } Console.WriteLine("Nu ska vi se om du får bingo!"); //hjälp! if (ValdaNummer[] == Slumptal) { Console.WriteLine("BINGO! Nummer " + Slumptal + " var det vinnade nummret"); } else Console.WriteLine("Tyvärr fick du inte bingo idag..."); Console.ReadLine(); } } }

Permalänk
Medlem

Din jämförelse mellan vinnande nummer och de som spelaren har jämför olika saker ser det ut som.

Skickades från m.sweclockers.com

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk
Medlem
Skrivet av hannaanonym:

okej, skäms över hur den ser ut just nu så döm mig inte för hårt xD

using System; namespace lotto { class Program { public static void Main(string[] args) { Random randomare = new Random(); int Slumptal = randomare.Next(0, 26); int[] ValdaNummer = new int[10]; Console.WriteLine("Hej och välkommen till lotto!"); Console.WriteLine("Du ska nu få skriva in 10 nummer (mellan 1 och 25) som kommer vara dina lotto nummer"); for (int x = 0; x < ValdaNummer.Length; x++) { Console.WriteLine("Vänligen skriv ett nummer: "); try { ValdaNummer[x] = int.Parse(Console.ReadLine()); } catch (Exception) { Console.WriteLine("\n" + "Skriv bara in heltal tack!" + "\n"); continue; } if (ValdaNummer[x] <1 || ValdaNummer[x] >25) { Console.WriteLine("Bara nummer mellan 1 och 25!"); } } Console.WriteLine("Det här är dina 10 olika nummer: "); foreach (int xNr in ValdaNummer) { Console.WriteLine(xNr); } Console.WriteLine("Nu ska vi se om du får bingo!"); //hjälp! if (ValdaNummer[] == Slumptal) { Console.WriteLine("BINGO! Nummer " + Slumptal + " var det vinnade nummret"); } else Console.WriteLine("Tyvärr fick du inte bingo idag..."); Console.ReadLine(); } } }

Din första loop kommer att ge dig problem. Du kör en try/catch runt inmatningen, sedan kollar du om talet man angett är inom kraven. Det du däremot inte gör är att ändra talet om det är felaktigt. För att göra det enkelt för dig så bör detta block ligga innanför try-blocket och if-satsen bör validera talet INNAN det sätts in i arrayen.

Andra problemet är då du kör catch och endast continue så kommer loopen att fortsätta med nästa iteration, vips så har du hoppat över en inmatning och har nu 0 (default för int) på den positionen i arrayen. Fortsätter du upprepa felaktiga inmatingar så kommer du vidare med en array med enbart nollor.
Ditt slumptal slumpar fram 0-25, så om användaren bara får välja 1-25 så bör inte 0 vara ett vinnande tal.. om det inte fungerar som spel i verkligheten ;p

För jämförelsen så är det i princip som du gjort innan, du loopar igenom arrayen och gör en kontroll mot slumptalet. Detta går bra med både foreach och en for-loop, foreach är nog tydligare att läsa för en människa.

bool hasWon = false; foreach(var number in ValdaNummer) { if(number == Slumptal) { hasWon = true; } } if(hasWon) { // Grattis du har vunnit, rätt tal var Slumptal } else { // Tyvärr, ingen vinst denna gång. }

Permalänk

@zaibuf:
ska ändra om ut efter det du skrivit återkommer om jag fuckar upp det...

Permalänk

@zaibuf:
Tack för svaret!!
Jag lyckades fixa koden (la till x-- där det behövdes) och resten fixade jag med hjälp av det sisa du skrev
Räddaren i nöden verkligen!

kommer inte lägga upp den färdiga koden eftersom det finns små fuskisar där ut