Lottouppgiften, funkar inte
Har en uppgift som heter Lotto: Skapa en vektor som håller tio värden. Programmet ska sedan iterera (upprepa sig) för varje position i vektorn. Detta sker med en for-loop. För varje "varv" i loopen så ska ni låta användaren skriva in en siffra. Denna siffra kommer då placeras i nästa lediga position i vektorn.
Det står även följande kod men varför funkar det inte: För att skapa slumptal (mellan 1 och 21) i C# så kan man skriva:
Random slump = new Random();
slump = slump.Next(1,21)
Vad blir det för fel?
Jaha, jag ser. Felmeddelandena är till hjälp. Din variabel slump är en slumptalsgenerator, men den kan inte vara själva slumptalet på samma gång. Ändra slump till generator på rad 7 och 8, alltså rad 8 ska lyda
int slump = generator.Next(1,21);
Tack! Nu finns det inga fel. När jag ser resultatet nu trår jag att jag tolkat uppgiften fel? "Utmaningen i uppgiften går ut på att ni ska skapa en vektor som håller tio värden. Programmet ska sedan iterera (upprepa sig) för varje position i vektorn. Detta sker med en for-loop. För varje "varv" i loopen så ska ni låta användaren skriva in en siffra. Denna siffra kommer då placeras i nästa lediga position i vektorn.
För detta ändamål använder ni en for-loop. I nästa moment ska ni iterera genom vektorn som är ifylld med tal. Om ett tal i vektorn matchar det inskrivna talet så får ni "bingo".
Såhär ser det ut nu :(
Jag tycker din kod ser rätt ut. Skriv ut vad slumptalet blev på slutet så ser du om det borde ha matchat eller inte.
Det blir ingen Bingo när rätt svar anges..slumptalet var 17 här..hittar inte felet..
Välkommen! Ange tio valfria tal mellan 1 och 21
Number:10
Number:11
Number:12
Number:13
Number:14
Number:15
Number:16
Number:17
Number:18
Number:19
Tyvärr, försök på nytt
17
Vi får skriva ut fler saker. Skriv ut vad element har för värde innan du jämför.
using System.Net.NetworkInformation;
class Program
{
public static void Main(String[] args)
{
Console.WriteLine("Välkommen! Ange tio valfria tal mellan 1 och 21");
Random generator= new Random(); //genererar slumpat tal
int slump = generator.Next(1,21); //slumpar tal mellan 1 och 21
int min = 1;
int max = 21;
slump = generator.Next(min,max);
int[] arr = new int[10]; //antal försök användaren får på sig.
for (int i = 0; i <10; i++)
{
Console.Write("Number:");
string st = Console.ReadLine();
int element = Convert.ToInt32(st);
arr[i] = element;
}
foreach (int element in arr)
{
if (element == slump)
{
Console.WriteLine("Bingo! Du vann!");
}
else
{
Console.WriteLine("Tyvärr, försök på nytt");
Console.WriteLine("Slumptalet var " + slump);
break;
}
}
}
}
Men det har jag redan gjort?
Nej, jag menar före raden
if (element == slump)
Console.Write("Number:");
string st = Console.ReadLine();
int element = Convert.ToInt32(st);
arr[i] = element;
element = Convert.ToInt32(element);
element = int.Parse(st);
}
foreach (int element in arr)
{
if (element == slump)
{
Console.WriteLine("Bingo! Du vann!");
Såhär står det, men blir ingen bingo vid korrekt svar..har jag placerat fel? Förstår inte vad jag gjort fel..
Vi håller på att ta reda på vad som är fel. Skriv ut vad element har för värde innan du jämför, så vi ser om det är fel före den punkten eller efter.
Jag har förstått det, men när jag varken vet vart jag ska skriva det eller hur så visas felmeddelanden. Antingen när jag skriver på fel plats, ovan foreach eller strax innan. Eller när jag skriver värden på fel sätt.
Har testat att placera den överallt och skriva på alla möjliga olika sätt så element ska få värden 1-21
Visa koden när du försöker.
Testat bland annat följande och får felmeddelande not all code paths return a value
element = int.MinValue - int.MaxValue;
element = 1 - 21;
Jag förstår inte vad du gör nu. Ändra inte element, skriv bara ut det.