Helt kört fast på uppgift i nybörjar-programmering; C#...

Permalänk

Helt kört fast på uppgift i nybörjar-programmering; C#...

Hej! Har nåt läget att hur mycket jag än tittar på vad jag gjort eller andra gjort så fattar jag inte vart det blir fel... Poängen är enkel och jag gör det troligtvis svårare än vad det är vilket lämnar mig arg och frustrerade. All hjälp mottages tacksamt innan datorn flyger med sladden först ut genom fönstret.

Man ska alltså ha ett nr mellan 1-25 och spelet ska random dra ett nr som sen ska jämföras med de tio nr som spelaren får välja. Här är min kod just nu;

namespace Lottodragning { class Program { static void Main(string[] args) { Console.WriteLine("Välkommen till Lottodragningen; vänligen skriv in de 10 tal du vill tävla med: "); Console.WriteLine("Välj siffror mellan 1-25; tryck enter mellan varje siffra du väljer : "); int[] guestNr = new int[10]; try { guestNr[0] = int.Parse(Console.ReadLine()); guestNr[1] = int.Parse(Console.ReadLine()); guestNr[2] = int.Parse(Console.ReadLine()); guestNr[3] = int.Parse(Console.ReadLine()); guestNr[4] = int.Parse(Console.ReadLine()); guestNr[5] = int.Parse(Console.ReadLine()); guestNr[6] = int.Parse(Console.ReadLine()); guestNr[7] = int.Parse(Console.ReadLine()); guestNr[8] = int.Parse(Console.ReadLine()); guestNr[9] = int.Parse(Console.ReadLine()); } catch (Exception) { Console.WriteLine("Använd bara siffror mellan 1-25"); } Console.WriteLine("Let the Game begin!"); Random randomness = new Random(); int victoryNr = randomness.Next(1, 25); for (int i = 0; i < 25; i++) if (victoryNr == guestNr[i]) { Console.WriteLine("Grattis! Rätt nummer var " + victoryNr + " och du lyckades pricka in den!"); break; } else { Console.WriteLine("Rätt nummer blev " + victoryNr + " Bättre lycka nästa gång!"); break; }

Permalänk
Medlem

@IKnowLessThanJohnSnow: Det underlättar alltid om du faktiskt talar om vad som är fel, men det uppenbara felet jag kan se är att du avslutar den sista loopen redan i första iterationen oavsett om siffran var rätt eller inte (du har med andra ord break i båda grenarna av if-satsen). Du kan inte avgöra om spelaren har gissat fel förrän du gått igenom alla spelarens siffror, d.v.s. använd for-loopen enbart för att avgöra om spelaren har gissat rätt eller inte och ha utskrifterna efter loopen istället.

Du loopar även för många gånger, antalet gissningar är bara 10 och inte 25. Använd hellre guestNr.Length som villkor i for-loopen istället (varför heter arrayen guestNr förresten, ska det kanske vara guessNr?). Passa gärna på att ändra så att du använder en for-loop även för inläsningen till arrayen, istället för att upprepa Console.ReadLine. Du bör med andra sträva efter att kunna ändra antalet gissningar på ett enda ställe i koden, och allt ska fungera korrekt.

Sist men inte minst, använd gärna code-taggar när du postar kod här, så blir den mycket lättare att läsa. D.v.s.:
[code]
Kod här
[/code]

Tillägg: Förresten, gör dig själv en tjänst och lär dig använda debuggern, här är t.ex. en kort video som visar hur det fungerar. Det kommer spara dig väldigt mycket tid om du bara tar några minuter och lär dig hur det fungerar, eftersom debuggern låter dig stega igenom din kod rad för rad och se exakt vad koden gör.

Permalänk
Medlem

Förutom ovanstående så skulle jag vilja tillägga att du aldrig gör en kontroll om det guestNr faktiskt är mellan 1 och 25, dvs 2 till och med 24. Int.Parse kontrollerar bara om inmatningen är en korrekt int, vilket även 1679 är...

Skickades från m.sweclockers.com

Visa signatur

WS: R7 2700x | RTX 2070S | Corsair AX860W | Lian Li PC-O11 Dynamic
Unraid: R7-2700X | GTX1050 | 3U chassi med 20 diskplatser
Servrar: 3x NUC 10 i5 ESX-kluster

Permalänk
Medlem
Skrivet av whisky:

Förutom ovanstående så skulle jag vilja tillägga att du aldrig gör en kontroll om det guestNr faktiskt är mellan 1 och 25, dvs 2 till och med 24. Int.Parse kontrollerar bara om inmatningen är en korrekt int, vilket även 1679 är...

Skickades från m.sweclockers.com

Kontroller på variabler är sällan nybörjargrej. Men en bra grej att kunna.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
Felkod40

Permalänk
Medlem

@freddyfresh: Jag tänkte mest på att TS hade en try/catch, men felmeddelandet som skrevs ut var inte helt sanningsenligt. Eftersom uppgiften dessutom var att användaren skulle mata in ett tal mellan 1 och 25 så måste det kontrolleras att det är det användaren gör, annars följs inte uppgiften.

Visa signatur

WS: R7 2700x | RTX 2070S | Corsair AX860W | Lian Li PC-O11 Dynamic
Unraid: R7-2700X | GTX1050 | 3U chassi med 20 diskplatser
Servrar: 3x NUC 10 i5 ESX-kluster

Permalänk
Medlem

Förstår hur du tänker nu Det går lätt att lösa däremot.

Om man skulle lagrat en variabel temporärt som t.ex. "input" som ligger före.

  1. Läs in värdet och spara det till en variabel (exempelvis "input")

  2. Kolla i en if-sats om den är större än (>) 0 och (&&) mindre än 26 (<)

  3. Tilldela den guestNr[9] = input;

  4. Repetera för varje (om man nu väljer att använda metoden ovan) (vore enklare med en for-loop).

Finns ganska många lösningar här, men kan du visa uppgiften du fick istället för att vi gissar oss fram?

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
Felkod40

Permalänk
Medlem

for i = 0; i < 10; i++
num[i] = readline
if num[i] < 1 || num[i] > 25
print "dumbjävel"; i--

Lite snabb psedo kod, är inte krångligare så vida man inte vill hantera decimaltal också.

Permalänk
Medlem
Skrivet av Sinery:

for i = 0; i < 10; i++
num[i] = readline
if num[i] < 1 || num[i] > 25
print "dumbjävel"; i--

Lite snabb psedo kod, är inte krångligare så vida man inte vill hantera decimaltal också.

Lite väl dömande eller?

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
Felkod40

Permalänk
Permalänk
Avstängd

Uppenbara fel är att du breakar i båda samt att du loopar 25 gånger istället för 10. Tänk efter om du verkligen behöver ett else i for loopen eller inte. För övrigt bör du alltid använda måsvingar vid if, for loopar, while loopar osv. I denna uppgift är det väl lätt att se men vid eventuella större program är det dödsfällor.

Mvh