Vill du vara del av diskussionerna i forumet, ställa frågor eller hjälpa andra? Registrera dig här!
Trädvy Permalänk
Medlem
Registrerad
Dec 2018

Lottobollar, uppgift med C#

Hej!
Jag fick en uppgift där ett program ska skrivas med C# och som handlar om vektorer och slumptal.
Användaren få skriva in 10 tal mellan 1-25 som lagras i vektorn, och om slumptalet matchar ett av de 10 tal, då får användaren Bingo, d.v.s. att talet i vektorn är lika med talet som slumpats fram.

Om talet som användaren skriver in är under 1 eller över 25, så kommer värdet i variabeln (i) att minskas med ett, därmed backar vi ett steg i vektorn, och få ett meddelande ("Du måste mata in ett tal mellan 1-25"). Problemet är att när jag kör programmet och skriver in tal som är högre än 25 eller mindre än 1 får jag inte meddelandet!

Det jag har kommit fram till är:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Test2 { class Program { static void Main(string[] args) { int antalFörsökningar = 10; int minstaInmatning = 1; int högstaInmatning = 25; int[] vektor = new int[antalFörsökningar]; for (int i = 0; i < vektor.Length; i++) { Console.WriteLine("Vällkommen! Skriv ett nummer mellan " + minstaInmatning + " - " + högstaInmatning); int element = 0; if (int.TryParse(Console.ReadLine(), out element)) { vektor[i] = element; } else { Console.WriteLine("Du måste mata in ett tal mellan 1-25"); --i; } } Random r = new Random(); int slump = r.Next(minstaInmatning, högstaInmatning + 1); bool Bingo = false; for (int i = 0; i < vektor.Length; i++) { if (vektor[i] == slump) { Bingo = true; } } if (Bingo == true) { Console.WriteLine("Tal " + slump + " matchade! Du fick Bingo!"); } else { Console.WriteLine("Tyvärr! Det blev ingen bingo!"); } Console.WriteLine("Slut!"); Console.ReadKey(); } } }

Tagit bort skrik på hjälp i rubrik /Mod
Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jul 2016

@Karrar_90:

Använd [code2][/code2] ta bort 2an.

Man är inte dum för att man har stavproblem.
Läs mer om min synfel Visual Snow
Om mig ----> #16970666

Trädvy Permalänk
Medlem
Registrerad
Dec 2018
Skrivet av superegg:

@Karrar_90:

Använd [code2][/code2] ta bort 2an.

Gjort 😉

Trädvy Permalänk
Medlem
Plats
Örebro
Registrerad
Jul 2008

Du kontrollerar endast att användaren har matat in något som kan översättas till ett heltal. Du måste också kontrollera att det inmatade talet faktiskt ligger inom det giltiga intervallet.

För övrigt brukar en sån här lagringsstruktur benämnas "array". Vektorer används oftast för att ange en punkt, riktning, hastighet eller liknande i 2D/3D och har då en x, y och z-komponent.

Lycka till!

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Registrerad
Jan 2013

Hur kommer det sig att du har en foor loop när du skriver ut välkommen i början? Borde inte det skriva ut välkommen 10 gånger? Sen i foor loopen har du i++ men efter har du --i. Rekommenderar att du sätter ++/-- på samma sida av i för snyggare kod. Lycka till

Trädvy Permalänk
Entusiast
Testpilot
Plats
Göteborg
Registrerad
Aug 2011
Skrivet av superegg:

@Karrar_90:

Använd [code2][/code2] ta bort 2an.

[noparse] är din vän! Det går till exempel att få [code]...[/code] genom att skriva så:

[cmd][noparse][code]...[/code][/noparse][/cmd]

Och med Better SweClockers slipper du skriva BB-koden själv.

Skrivet med hjälp av Better SweClockers

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jul 2016
Skrivet av Alling:

[noparse] är din vän! Det går till exempel att få [code]...[/code] genom att skriva så:

[cmd][noparse][code]...[/code][/noparse][/cmd]

Och med Better SweClockers slipper du skriva BB-koden själv.

ah där ser man gäller att komma ihåg det. Är det någon nya version eller är det den gamla?

Man är inte dum för att man har stavproblem.
Läs mer om min synfel Visual Snow
Om mig ----> #16970666

Trädvy Permalänk
Entusiast
Testpilot
Plats
Göteborg
Registrerad
Aug 2011
Skrivet av superegg:

ah där ser man gäller att komma ihåg det. Är det någon nya version eller är det den gamla?

Om du menar Better SweClockers så är det "nya" Better SweClockers från slutet av december, plus några uppdateringar sedan dess.

Skrivet med hjälp av Better SweClockers

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jul 2016
Skrivet av Alling:

Om du menar Better SweClockers så är det "nya" Better SweClockers från slutet av december, plus några uppdateringar sedan dess.

Får testa den nån dag.

Man är inte dum för att man har stavproblem.
Läs mer om min synfel Visual Snow
Om mig ----> #16970666

Trädvy Permalänk
Medlem
Registrerad
Dec 2018
Skrivet av orre1996:

Hur kommer det sig att du har en foor loop när du skriver ut välkommen i början? Borde inte det skriva ut välkommen 10 gånger? Sen i foor loopen har du i++ men efter har du --i. Rekommenderar att du sätter ++/-- på samma sida av i för snyggare kod. Lycka till

Tack @orre1996 gjort, precis koden ser snyggare ut nu, dock användaren får inte felmeddelandet fortfarande.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Test2 { class Program { static void Main(string[] args) { int antalFörsökningar = 10; int minstaSlumptal = 1; int högstaSlumptal = 25; Console.WriteLine("Vällkommen! Skriv ett nummer mellan " + minstaSlumptal + " - " + högstaSlumptal); int[] vektor = new int[antalFörsökningar]; for (int i = 0; i < vektor.Length; ++i) { int element = 0; if (int.TryParse(Console.ReadLine(), out element)) { vektor[i] = element; } else { Console.WriteLine("Du måste mata in ett tal mellan 1-25"); --i; } } Random r = new Random(); int slump = r.Next(minstaSlumptal, högstaSlumptal + 1); bool Bingo = false; for (int i = 0; i < vektor.Length; ++i) { if (vektor[i] == slump) { Bingo = true; } } if (Bingo == true) { Console.WriteLine("Tal " + slump + " matchade! Du fick Bingo!"); } else { Console.WriteLine("Tyvärr! Det blev ingen bingo!"); } Console.WriteLine("Slut!"); Console.ReadKey(); } } }

Trädvy Permalänk
Medlem
Plats
Falun
Registrerad
Dec 2003
Skrivet av Karrar_90:

Tack @orre1996 gjort, precis koden ser snyggare ut nu, dock användaren får inte felmeddelandet fortfarande.

for (int i = 0; i < vektor.Length; ++i) { int element = 0; if (int.TryParse(Console.ReadLine(), out element)) { vektor[i] = element; } else { Console.WriteLine("Du måste mata in ett tal mellan 1-25"); --i; } }

Du gör ingen kontroll att heltalet (element) är vad du vill att den ska vara, mellan 1 (minstaInmatning) och 25 (högstaInmatning).

ηλί, ηλί, λαμά σαβαχθανί!?

Trädvy Permalänk
Medlem
Registrerad
Okt 2012

Problemet är att du inte kollar om talet är mellan 1-25.

// is an int? if (int.TryParse(Console.ReadLine(), out element)) { // todo: check if value is valid } // was not an int else { // todo: handle if input was not a valid int }

Trädvy Permalänk
Medlem
Registrerad
Dec 2018
Skrivet av Leedow:

Du gör ingen kontroll att heltalet (element) är vad du vill att den ska vara, mellan 1 (minstaInmatning) och 25 (högstaInmatning).

Tack @Leedow jag redigerade koden lite gran, och den ser ut så här istället:

for (int i = 0; i < vektor.Length; ++i) { int element = Convert.ToInt32(Console.ReadLine()); vektor[i] = element; if (vektor[i] > 25 || vektor[i] < 1 ) { Console.WriteLine("Du får bara ange tal mellan 0-25"); --i; } }

Undrar om man kan undvika text skrivning också, och meddela användaren att det är bara heltal som gäller?

Trädvy Permalänk
Medlem
Plats
Arboga
Registrerad
Jan 2002

Kolla på exemplet från @zoomster2, int.tryParse ser till att det enbart är heltal som matas in, då kan du i else visa ett meddelande om att inmatningen var felaktig.

Sen tycker jag du borde lägga in inmatningen i vektorn EFTER du gjort kontrollen. Annars kommer du få problem om det inte är ett heltal.

Intel Core i7 6700K | Gigabyte Z170X-UD3 | Corsair Vengeance LPX 16GB DDR4 2400Mhz | EVGA GTX 980Ti Hybrid | Samsung 950 PRO 256GB | Noctua NH-D15 | EVGA G2 750 | Fractal Design Define R5

Trädvy Permalänk
Medlem
Plats
Falun
Registrerad
Dec 2003
Skrivet av Karrar_90:

Tack @Leedow jag redigerade koden lite gran, och den ser ut så här istället:

for (int i = 0; i < vektor.Length; ++i) { int element = Convert.ToInt32(Console.ReadLine()); vektor[i] = element; if (vektor[i] > 25 || vektor[i] < 1 ) { Console.WriteLine("Du får bara ange tal mellan 0-25"); --i; } }

Undrar om man kan undvika text skrivning också, och meddela användaren att det är bara heltal som gäller?

Du behöver inte hårdkoda 1 och 25, du har ju redan variabler för det.
Du tog bort TryParse-koden vilket gjorde att du blev av med koden som kontrollerar att det enbart är heltal som gäller.

ηλί, ηλί, λαμά σαβαχθανί!?

Trädvy Permalänk
Medlem
Registrerad
Dec 2018
Skrivet av Leedow:

Du behöver inte hårdkoda 1 och 25, du har ju redan variabler för det.
Du tog bort TryParse-koden vilket gjorde att du blev av med koden som kontrollerar att det enbart är heltal som gäller.

Kan inte lösa detta, det får bli då. Tack för hjälpen ändå.

Trädvy Permalänk
Medlem
Plats
Falun
Registrerad
Dec 2003
Skrivet av Karrar_90:

Kan inte lösa detta, det får bli då. Tack för hjälpen ändå.

Skriv en kommentar innan varje rad med kod som du tycker är besvärlig eller inte kommer minnas vad den gör.

int element; int högstaSlumptal = 25; int minstaSlumptal = 1; //Om inmatad text går att tolkas som ett heltal if (int.TryParse(Console.ReadLine(), out element)) { //Ja, ett heltal } else { //Nej, inte ett heltal } //Om inmatat heltal är större än 25 eller mindre än 1 if (element > högstaSlumptal || element < minstaSlumptal ) { //Ja } else { //Nej }

ηλί, ηλί, λαμά σαβαχθανί!?

Trädvy Permalänk
Medlem
Registrerad
Dec 2018
Skrivet av Leedow:

Skriv en kommentar innan varje rad med kod som du tycker är besvärlig eller inte kommer minnas vad den gör.

int element; int högstaSlumptal = 25; int minstaSlumptal = 1; //Om inmatad text går att tolkas som ett heltal if (int.TryParse(Console.ReadLine(), out element)) { //Ja, ett heltal } else { //Nej, inte ett heltal } //Om inmatat heltal är större än 25 eller mindre än 1 if (element > högstaSlumptal || element < minstaSlumptal ) { //Ja } else { //Nej }

Jag bör använda vektorer bara, så om talet som användaren skriver är mindre än 1, eller större än 25 då kommer talet inte att lagras i vektorn, annars (om talet är högre än 1 och mindre än 25) då kommer talet att lagras i vektorn. Utöver detta så måste vi kontrollera att det är bara heltal som gäller.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Aug 2013
Skrivet av Karrar_90:

Jag bör använda vektorer bara, så om talet som användaren skriver är mindre än 1, eller större än 25 då kommer talet inte att lagras i vektorn, annars (om talet är högre än 1 och mindre än 25) då kommer talet att lagras i vektorn. Utöver detta så måste vi kontrollera att det är bara heltal som gäller.

Ni får inte använda while loop? Känns mer logiskt om jag tolkar det rätt, d.v.s. användaren ska mata in 10 tal mellan 1-25 sen då 10 tal är inmatad så ska programmet "köras" och du ska få ut resultat om man vunnit?
Eller ska den kontrollera varje tal man matat in om det matchar det slumpade talet?

Trädvy Permalänk
Medlem
Registrerad
Dec 2018
Skrivet av zaibuf:

Ni får inte använda while loop? Känns mer logiskt om jag tolkar det rätt, d.v.s. användaren ska mata in 10 tal mellan 1-25 sen då 10 tal är inmatad så ska programmet "köras" och du ska få ut resultat om man vunnit?
Eller ska den kontrollera varje tal man matat in om det matchar det slumpade talet?

@zaibuf
Jag försökte göra detta med Do While-loop men det funkade inte.
Om talet som användaren skriver in är under 1 eller över 25 kan man minska värdet i variabeln (i) som styr positionen med ett (1). Då ”backar” vi ett steg i vektorn.
Alltså – för varje varv som for-loopen itererar så kommer värdet på variabeln som styr förändring att öka med ett (1). Men om vi skriver in ett ”olämpligt” värde så kommer värdet att minska med ett (1) i koden inuti loopen.
Alternativet är att vi sparar det inmatade talet i en temporär variabel och lagrar det i vektorn om det uppnår kraven (det vill säga är mellan ett och tjugofem).

Trädvy Permalänk
Medlem
Plats
Falun
Registrerad
Dec 2003
Skrivet av Karrar_90:

@zaibuf
Jag försökte göra detta med Do While-loop men det funkade inte.
Om talet som användaren skriver in är under 1 eller över 25 kan man minska värdet i variabeln (i) som styr positionen med ett (1). Då ”backar” vi ett steg i vektorn.
Alltså – för varje varv som for-loopen itererar så kommer värdet på variabeln som styr förändring att öka med ett (1). Men om vi skriver in ett ”olämpligt” värde så kommer värdet att minska med ett (1) i koden inuti loopen.
Alternativet är att vi sparar det inmatade talet i en temporär variabel och lagrar det i vektorn om det uppnår kraven (det vill säga är mellan ett och tjugofem).

Alla saker man behöver iterera går att göra med vilken form av loop som helst. Valet handlar om omkringliggande saker, vad som behövs och hur logiken följer. Olika loopar är lämpliga för olika saker men det är inget direkt tvång att använda en specifik typ av loop. Lite enkelt skulle jag säga att i vanliga fall använder man for-loopar för iterationer där man vet antalet varv som ska göras. En while-loop använder man för iterationer där man inte vet antalet varv som ska göras. do-while använder man när man inte vet antalet varv utom att minst ett varv ska göras.

Av utbildningsskäl så rekommenderar jag att försöka lösa den med både while och do-while så snart som möjligt.

Lite mer överkurs är att utelämna delarna i for-loopen. Exempelvis att ta bort eller flytta "iterator"-delen (i++). Det är väldigt enkelt att man blir låst i utseendet av en for-loop och att man glömmer bort att den består av tre delar där ingen av delarna är ett krav för att for-loopen ska exekveras.

ηλί, ηλί, λαμά σαβαχθανί!?

Trädvy Permalänk
Medlem
Registrerad
Apr 2019

Tjabba, lånar tråden lite då jag gör samma uppgift.
Har precis börjat med koden men när jag skriver in mina tal så får jag upp att indatasträngen är felaktigt format.
Dessutom har jag en fråga, hur vet jag om dessa 10 tal som jag skriver in lagras i en vektor?

Hur ska jag skriva in dessa tal så dom lagras, har försökt läsa på om vektorer men ingenstans står det om att användaren ska skriva in värdena i vektorn, utan programmeraren ger värdena själv. Därför jag vänder mig hit.

Console.WriteLine("Tjena skojare, skriv 10 tal mellan 1-25"); // skriver ut den texten int[] nummer; nummer = new int[10]; // Skapar en vektor med 10 tal i for (int i = 0; i < nummer.Length; i++) // Skapar en loop och ger värdet i = 0, samt fortsätter med loopen i vektorns längd, skriver ut talet, sedan +1 på i" { string insert = Console.ReadLine(); // ger min gissning str insert int nr = Convert.ToInt32(insert); // ändrar min insert till heltal nummer[i] = nr; // min vektor och antal nummer från loopen = nr }

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

@mattin123: Vad menar du med att indatasträngen har felaktigt format? Om du ger Convert.ToInt32 en sträng som inte kan tolkas som ett tal så kastas ett FormatException, som du bör fånga med en try-catch (eller alternativt använda Int32.TryParse istället). Se dokumentationen för Convert.ToInt32 för exempel.

När det gäller att lagra de inmatade talen i en vektor så är det ju exakt det din kod gör, så vad är det du inte förstår gällande det? Syntaxen är vektor[index] = värde; för att tilldela ett element i vektorn ett värde. Om värdet kommer från användaren via t.ex. Console.ReadLine() eller någon annanstans ifrån spelar ingen som helst roll.

Trädvy Permalänk
Medlem
Registrerad
Apr 2019
Skrivet av perost:

@mattin123: Vad menar du med att indatasträngen har felaktigt format? Om du ger Convert.ToInt32 en sträng som inte kan tolkas som ett tal så kastas ett FormatException, som du bör fånga med en try-catch (eller alternativt använda Int32.TryParse istället). Se dokumentationen för Convert.ToInt32 för exempel.

När det gäller att lagra de inmatade talen i en vektor så är det ju exakt det din kod gör, så vad är det du inte förstår gällande det? Syntaxen är vektor[index] = värde; för att tilldela ett element i vektorn ett värde. Om värdet kommer från användaren via t.ex. Console.ReadLine() eller någon annanstans ifrån spelar ingen som helst roll.

När frågan ställs ut i en console och jag svarar:
1,2,3,4,5,6,7,8,9,10
och sedan trycker på enter, så avslutas programmet med felmeddelandet "Indatasträngen har ett felaktigt format"
Skriver jag ut svaret:
1
2
3
4
5 osv så kan jag fortsätta till hur mycket som helst utan att den avbryter.

Som sagt jag är ny gällande programmering, och undrar hur jag vet när dessa 10 inmatningar som jag gör lagras i en vektor. Jag förstår att jag gör det med min for loop som loopar genom svaren. Men när jag sedan försöker skriva ut min vektor: Console.Writeline(gissningar[i]); så dör consolen varje gång, så något gör jag ju fel...?

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Aug 2013
Skrivet av mattin123:

När frågan ställs ut i en console och jag svarar:
1,2,3,4,5,6,7,8,9,10
och sedan trycker på enter, så avslutas programmet med felmeddelandet "Indatasträngen har ett felaktigt format"
Skriver jag ut svaret:
1
2
3
4
5 osv så kan jag fortsätta till hur mycket som helst utan att den avbryter.

Som sagt jag är ny gällande programmering, och undrar hur jag vet när dessa 10 inmatningar som jag gör lagras i en vektor. Jag förstår att jag gör det med min for loop som loopar genom svaren. Men när jag sedan försöker skriva ut min vektor: Console.Writeline(gissningar[i]); så dör consolen varje gång, så något gör jag ju fel...?

1,2,3,4,5,6,7,8,9,10 är en sträng och den kommer inte parsa det, vilket gör att det crashar med ett FormatException. Som du skriver koden nu måste du ange ett tal i taget 10 gånger.
T.ex.
1 (tryck enter)
2 (tryck enter)
3 (tryck enter)
4 (tryck enter)
5 (tryck enter)
etc..
Då du når 10 tal (längden på arrayen och loopen) kommer den hoppa ur loopen och fortsätta din kod efter blocket för loopen.

Trädvy Permalänk
Medlem
Registrerad
Apr 2019
Skrivet av zaibuf:

1,2,3,4,5,6,7,8,9,10 är en sträng och den kommer inte parsa det, vilket gör att det crashar med ett FormatException. Som du skriver koden nu måste du ange ett tal i taget 10 gånger.
T.ex.
1 (tryck enter)
2 (tryck enter)
3 (tryck enter)
4 (tryck enter)
5 (tryck enter)
etc..
Då du når 10 tal (längden på arrayen och loopen) kommer den hoppa ur loopen och fortsätta din kod efter blocket för loopen.

Tack så mycket! Med andra ord har jag gjort rätt med att skapa en array misstänker jag?
Skapar jag nu en randomerare
för att sedan köra loopen igen?

Trädvy Permalänk
Medlem
Registrerad
Apr 2019
Skrivet av perost:

@mattin123: Vad menar du med att indatasträngen har felaktigt format? Om du ger Convert.ToInt32 en sträng som inte kan tolkas som ett tal så kastas ett FormatException, som du bör fånga med en try-catch (eller alternativt använda Int32.TryParse istället). Se dokumentationen för Convert.ToInt32 för exempel.

När det gäller att lagra de inmatade talen i en vektor så är det ju exakt det din kod gör, så vad är det du inte förstår gällande det? Syntaxen är vektor[index] = värde; för att tilldela ett element i vektorn ett värde. Om värdet kommer från användaren via t.ex. Console.ReadLine() eller någon annanstans ifrån spelar ingen som helst roll.

Skrivet av zaibuf:

1,2,3,4,5,6,7,8,9,10 är en sträng och den kommer inte parsa det, vilket gör att det crashar med ett FormatException. Som du skriver koden nu måste du ange ett tal i taget 10 gånger.
T.ex.
1 (tryck enter)
2 (tryck enter)
3 (tryck enter)
4 (tryck enter)
5 (tryck enter)
etc..
Då du når 10 tal (längden på arrayen och loopen) kommer den hoppa ur loopen och fortsätta din kod efter blocket för loopen.

Är inne på slutspurten på denna uppgift, är väl några saker som jag får finslipa på men tänker att jag måste få ett fullt fungerande program. Av det jag förstår så har jag lagrat mina tal i en array. Enligt mig själv så ser jag inte felet, men vad vet jag. Jag tycker att jag har skapat en randomerare som tar ett nummer mellan 1-26.
Sedan går jag igenom loopen igen för att sedan dra jämförelse med if satser och else if.

Problemet jag har nu är att den inte säger till när jag har rätt. Får alltid att jag har fel svar.
Förmodligen kommer ni se något jag inte ser haha, uppskattar all hjälp.

Console.WriteLine("Tjena skojare, skriv 10 tal mellan 1-25"); // skriver ut den texten int[] gissningar = new int[10]; for (int i = 0; i < gissningar.Length; i++) { string tiotal = Console.ReadLine(); int nummer = Convert.ToInt32(tiotal); gissningar[i] = nummer; } Random randomerare = new Random(); int slump_tal = randomerare.Next(1, 26); for (int i = 0; i < gissningar.Length; i++) { if (slump_tal == gissningar[i]) { Console.WriteLine("Grattis, du har vunnit, rätt tal var: " + slump_tal); Console.ReadLine(); } else if (slump_tal != gissningar[i]) { Console.WriteLine("Tyvärr du har förlorat, rätt tal var: " + slump_tal); Console.ReadLine(); } }

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

@mattin123: Använd debuggern för att se vad som faktiskt sker när programmet körs och vad din vektor innehåller. Om du inte använt debuggern tidigare så gör dig själv en tjänst och lägg några minuter på att lära dig, det är inte alls komplicerat och är det mest användbara verktyg du har för att felsöka din kod. Här är en kort genomgång av hur det fungerar.

Trädvy Permalänk
Medlem
Registrerad
Jul 2017
Skrivet av mattin123:

Är inne på slutspurten på denna uppgift, är väl några saker som jag får finslipa på men tänker att jag måste få ett fullt fungerande program. Av det jag förstår så har jag lagrat mina tal i en array. Enligt mig själv så ser jag inte felet, men vad vet jag. Jag tycker att jag har skapat en randomerare som tar ett nummer mellan 1-26.
Sedan går jag igenom loopen igen för att sedan dra jämförelse med if satser och else if.

Problemet jag har nu är att den inte säger till när jag har rätt. Får alltid att jag har fel svar.
Förmodligen kommer ni se något jag inte ser haha, uppskattar all hjälp.

Console.WriteLine("Tjena skojare, skriv 10 tal mellan 1-25"); // skriver ut den texten int[] gissningar = new int[10]; for (int i = 0; i < gissningar.Length; i++) { string tiotal = Console.ReadLine(); int nummer = Convert.ToInt32(tiotal); gissningar[i] = nummer; } Random randomerare = new Random(); int slump_tal = randomerare.Next(1, 26); for (int i = 0; i < gissningar.Length; i++) { if (slump_tal == gissningar[i]) { Console.WriteLine("Grattis, du har vunnit, rätt tal var: " + slump_tal); Console.ReadLine(); } else if (slump_tal != gissningar[i]) { Console.WriteLine("Tyvärr du har förlorat, rätt tal var: " + slump_tal); Console.ReadLine(); } }

Svårt att svara helt korrekt när du inte skriver vad utskriften blir, och jag har inte kompilerar koden för att testa.

Men du har lagt din if-sats i for loopen, och console.readline() pausar väll loopen? Så om du tar bort console.readline() kommer du få 10 utskrifter, varav en bör visa att man vann (om man gissat rätt), och 9 visar att man förlorar.

Kontrollera istället bara om man gissade rätt i loopen, tex genom att ändra en bool om man gissade rätt, och gör utskriften efteråt med en if sats beroende på boolens värde.

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Plats
Skåneland
Registrerad
Mar 2005

Vad händer om jag skriver in samma nummer fler gånger? Är det dubbla oddset då om jag vinner?

Om du vill skriva in flera nummer kan du först använda "string.Split(','). sedan får du parsa alla värdena i spliten och se om de funkar.

All felhantering är inte med i min kod, den är bara ett exempel Helge..

int slump_tal= randomerare.Next(1, 26); string[] tiotal = Console.ReadLine().Split(','); int tal = -1; int counter = 0; foreach (var strTal in tiotal ) { if (int.tryParse(strTal, out tal) { if (tal == slump_tal) { Console.WriteLine("Grattis, du har vunnit, rätt tal var: " + slump_tal); break; } if (++counter >= 10) break; } } if (tal != slump_tal) Console.WriteLine("Tyvärr du har förlorat, rätt tal var: " + slump_tal);

"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