Knas med fel svar i utskrift
Jag har problemet att när det blir bingo, så skrivs det ut att det blev 'ingen bingo'
static void Main(string[] args) //Start
{
int antalInmatningar = 10; //Vi ska göra 10 inmatningar.
int minstaInmatning = 1; //Talet får inte vara under 1.
int högstaInmatning = 25; //Maxtalet är 25.
Console.WriteLine("Välkommen till Lotto, låt oss spela! Välj {0}st nummer mellan {1} - {2}", antalInmatningar, minstaInmatning, högstaInmatning); //Välkommnar och förklara vad användaren ska göra. Ge 10 tal mellan 1- 25.
Random randomerare = new Random(); //Här är en randomerare som ska slumpa tal.
int slumpTal = randomerare.Next(minstaInmatning, högstaInmatning + 1); //Slumpar ett tal mellan 1-25.
int[] lottoBoll = new int[antalInmatningar]; //Skapar en vektor med 10 positioner.
for (int i = 0; i < lottoBoll.Length; i++) //For loop, så länge inte alla positioner INTE ännu har ett värde fortsätter loopen och adderar 1 när ett värde adderas.
{
Console.Write("Spela på nummer {0}: ", i + 1); //Håller användaren uppdaterad om hur många tal hen har matat in. +1 är för att i börjar på 0 men vi vill ha 1 först.
try //En try/catch metod för fel input.
{
lottoBoll[i] = int.Parse(Console.ReadLine()); // Matar in värdet och konverterar från string till int.
}
catch
{
Console.WriteLine("Vänligen ange ett heltal, försök igen."); //Om inmatningen inte går igenom skrivs meddelandet.
i--; //Vid fel input backar loopen ett steg, vi vill inte spara ett felaktigt värde i en position.
}
if (lottoBoll[i] < minstaInmatning || lottoBoll[i] > högstaInmatning) //Om det inmatade talet är under 1 eller över 25, meddelar vi om att användaren behöver ge ett nytt värde.
{
Console.WriteLine("Gränsen är nummer mellan 1 - 15 ,det där får du göra om.");
i--; //Vid fel input backar loopen ett steg, vi vill inte spara ett felaktigt värde i en position.
}
}
Console.Clear(); //Vi rensar konsolen ren för ny utdata.
bool bingo = false; //Vi sätter matchningen 'bingo' till falskt och loopen fortsätter tills 10 tal är inmatade.
Console.WriteLine("Här är alla dina val:");
foreach (int input in lottoBoll) //För varje input skrivs värdet ut.
{
string ja = "Bingo!"; //Meddelande utskrivet om bingo.
string nej = "ingen bingo."; //Meddelande utskrivet om ingen bingo.
Console.Write("Lottoboll {0} blev ", input); //Skriver ut vilket dragningsnummer och om det blev bingo eller ej.
if (bingo)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(ja); //Om det blir bingo skrivs detta ut i grönt.
}
else if (!bingo)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(nej); //Om det inte blev bingo skrivs detta ut i rött.
}
}
for (int i = 0; i < lottoBoll.Length; i++) //For loop med samma värde som innan.
{
if (lottoBoll[i] == slumpTal) //Om ett tal matchar slumptalet ändras matchningen 'bingo' till true.
{
bingo = true;
}
}
if (bingo) //Om matchningen 'bingo' är true, om vi får bingo, får användaren veta det och vilket tal som var rätt.
{
Console.ForegroundColor = ConsoleColor.Green; //Texten skrivs ut i grönt.
Console.WriteLine("BINGO! Det rätta talet var {0}", slumpTal);
}
else //Annars får användaren veta att inget tal matchade slumptalet och vilket tal som var rätt.
{
Console.ForegroundColor = ConsoleColor.Red; //Texten skrivs ut i rött.
Console.WriteLine("Ingen bingo denna gång, det slumpade talet var {0}!", slumpTal);
}
Console.WriteLine("Spelet är slut!"); //Vi meddelar användaren att spelet/programmet är slut.
Console.ReadKey(); //Håller konsolen öppen efter avslut.
}
}
}
Efter du deklarerar variabeln bingo sätter du den inte till något förrän efter loopen som skriver ut resultatet.
Du får flytta upp kollen om det är bingo innan du skriver resultatet
for (int i = 0; i < lottoBoll.Length; i++)
{
if (lottoBoll[i] == slumpTal)
{
bingo = true;
}
}
foreach (int input in lottoBoll)
{ ... }
Sen kan skall du nog komma ihåg original foreground color innan du ändrar på den så att du kan återställa den efter du har skrivit ut texten
var oldFG = Console.ForegroundColor;
...
if (bingo)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(ja); //Om det blir bingo skrivs detta ut i grönt.
}
else if (!bingo)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(nej); //Om det inte blev bingo skrivs detta ut i rött.
}
Console.ForegroundColor = oldFG;
Ser nu ut såhär; , jag får felmeddelande att i cannot be declader in the scope och en varning om unreachable code
Console.Clear(); //Vi rensar konsolen ren för ny utdata.
bool bingo = false; //Vi sätter matchningen 'bingo' till falskt och loopen fortsätter tills 10 tal är inmatade.
for (int i = 0; i < lottoBoll.Length; i++) //For loop med samma värde som innan.
{
if (lottoBoll[i] == slumpTal) //Om ett tal matchar slumptalet ändras matchningen 'bingo' till true.
{
bingo = true;
}
}
Console.WriteLine("Här är alla dina val:");
foreach (int input in lottoBoll) //För varje input skrivs värdet ut.
{
string ja = "Bingo!"; //Meddelande utskrivet om bingo.
string nej = "ingen bingo."; //Meddelande utskrivet om ingen bingo.
Console.ForegroundColor = ConsoleColor.White; //Texten skrivs ut i vitt.
Console.Write("Lottoboll {0} blev ", input); //Skriver ut vilket dragningsnummer och om det blev bingo eller ej.
if (bingo)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(ja); //Om det blir bingo skrivs detta ut i grönt.
}
else if (!bingo)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(nej); //Om det inte blev bingo skrivs detta ut i rött.
}
}
if (bingo) //Om matchningen 'bingo' är true, om vi får bingo, får användaren veta det och vilket tal som var rätt.
{
Console.ForegroundColor = ConsoleColor.Green; //Texten skrivs ut i grönt.
Console.WriteLine("BINGO! Det rätta talet var {0}", slumpTal);
}
else //Annars får användaren veta att inget tal matchade slumptalet och vilket tal som var rätt.
{
Console.ForegroundColor = ConsoleColor.Red; //Texten skrivs ut i rött.
Console.WriteLine("Ingen bingo denna gång, det slumpade talet var {0}!", slumpTal);
}
Console.WriteLine("Spelet är slut!"); //Vi meddelar användaren att spelet/programmet är slut.
Console.ReadKey(); //Håller konsolen öppen efter avslut.
}
}
}
}
}
Vilka rader pekar felmeddelandena ut? Kan du markera dem i koden?
Några ytterligare kommentarer:
Hur skiljer sig denna uppgiften från bingouppgiften igår?
Varför har du en enhanced for loop? Vad vill du åstadkomma med den? Sedan så borde du flytta ut strängarna 'ja' och 'nej' utanför loopen, annars definierar du nya objekt n gånger vilket är onödigt.
varningen är på rad 11 i första bilden med hela koden och felmeddelandet är i for loopen överst i andra bilden
en enhaced for loop vet jag inte vad det betyder,
det är samma projekt som igår
Jag ser inte vilken kod som inte skulle kunna nås, i synnerhet inte på rad 11.
Jag kan inte C#, men om "for(int i" har gått bra förut borde det gå bra nu, tycker jag.
CJoy skrev:varningen är på rad 11 i första bilden med hela koden och felmeddelandet är i for loopen överst i andra bilden
en enhaced for loop vet jag inte vad det betyder,
det är samma projekt som igår
Foreach loopar är så kallade enhanced for loops.
Men logiken fungerar inte oavsett.
Om du kör for loopen före din foreach, antag att du har bingo, då är flaggan satt, och i din foreach kommer du ange bingo för alla tal. Om den inte sätts, kommer du ange ingen bingo för alla inputs, oberoende om det faktiskt var bingo.
precis efter clear()
for (int i = 0; får en CS0136
Det är precis det problemet jag försöker få bort Dracaena
static void Main(string[] args) //Start
{
int antalInmatningar = 10; //Vi ska göra 10 inmatningar.
int minstaInmatning = 1; //Talet får inte vara under 1.
int högstaInmatning = 25; //Maxtalet är 25.
Console.WriteLine("Välkommen till Lotto, låt oss spela! Välj {0}st nummer mellan {1} - {2}", antalInmatningar, minstaInmatning, högstaInmatning); //Välkommnar och förklara vad användaren ska göra. Ge 10 tal mellan 1- 25.
Random randomerare = new Random(); //Här är en randomerare som ska slumpa tal.
int slumpTal = randomerare.Next(minstaInmatning, högstaInmatning + 1); //Slumpar ett tal mellan 1-25.
int[] lottoBoll = new int[antalInmatningar]; //Skapar en vektor med 10 positioner.
for (int i = 0; i < lottoBoll.Length; i++) //For loop, så länge inte alla positioner INTE ännu har ett värde fortsätter loopen och adderar 1 när ett värde adderas.
{
Console.Write("Spela på nummer {0}: ", i + 1); //Håller användaren uppdaterad om hur många tal hen har matat in. +1 är för att i börjar på 0 men vi vill ha 1 först.
try //En try/catch metod för fel input.
{
lottoBoll[i] = int.Parse(Console.ReadLine()); // Matar in värdet och konverterar från string till int.
}
catch
{
Console.WriteLine("Vänligen ange ett heltal, försök igen."); //Om inmatningen inte går igenom skrivs meddelandet.
i--; //Vid fel input backar loopen ett steg, vi vill inte spara ett felaktigt värde i en position.
}
if (lottoBoll[i] < minstaInmatning || lottoBoll[i] > högstaInmatning) //Om det inmatade talet är under 1 eller över 25, meddelar vi om att användaren behöver ge ett nytt värde.
{
Console.WriteLine("Gränsen är nummer mellan 1 - 15 ,det där får du göra om.");
i--; //Vid fel input backar loopen ett steg, vi vill inte spara ett felaktigt värde i en position.
}
Console.Clear(); //Vi rensar konsolen ren för ny utdata.
bool bingo = false; //Vi sätter matchningen 'bingo' till falskt och loopen fortsätter tills 10 tal är inmatade.
//HÄR
for (int i = 0; i < lottoBoll.Length; i++) //For loop med samma värde som innan.
{
if (lottoBoll[i] == slumpTal) //Om ett tal matchar slumptalet ändras matchningen 'bingo' till true.
{
bingo = true;
}
}
Console.WriteLine("Här är alla dina val:");
string ja = "Bingo!"; //Meddelande utskrivet om bingo.
string nej = "ingen bingo."; //Meddelande utskrivet om ingen bingo.
foreach (int input in lottoBoll) //För varje input skrivs värdet ut.
{
Console.ForegroundColor = ConsoleColor.White; //Texten skrivs ut i vitt.
Console.Write("Lottoboll {0} blev ", input); //Skriver ut vilket dragningsnummer och om det blev bingo eller ej.
if (bingo)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(ja); //Om det blir bingo skrivs detta ut i grönt.
}
else if (!bingo)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(nej); //Om det inte blev bingo skrivs detta ut i rött.
}
}
if (bingo) //Om matchningen 'bingo' är true, om vi får bingo, får användaren veta det och vilket tal som var rätt.
{
Console.ForegroundColor = ConsoleColor.Green; //Texten skrivs ut i grönt.
Console.WriteLine("BINGO! Det rätta talet var {0}", slumpTal);
}
else //Annars får användaren veta att inget tal matchade slumptalet och vilket tal som var rätt.
{
Console.ForegroundColor = ConsoleColor.Red; //Texten skrivs ut i rött.
Console.WriteLine("Ingen bingo denna gång, det slumpade talet var {0}!", slumpTal);
}
Console.WriteLine("Spelet är slut!"); //Vi meddelar användaren att spelet/programmet är slut.
Console.ReadKey(); //Håller konsolen öppen efter avslut.
}
}
}
}
Så här ser koden ut nu; problemet som kvarstår är att när ett tal blir bingo så skrivs alla tal som skrivits in som bingo
int antalInmatningar = 10; //Vi ska göra 10 inmatningar.
int minstaInmatning = 1; //Talet får inte vara under 1.
int högstaInmatning = 25; //Maxtalet är 25.
Console.WriteLine("Välkommen till Lotto, låt oss spela! Välj {0}st nummer mellan {1} - {2}", antalInmatningar, minstaInmatning, högstaInmatning); //Välkommnar och förklara vad användaren ska göra. Ge 10 tal mellan 1- 25.
Random randomerare = new Random(); //Här är en randomerare som ska slumpa tal.
int slumpTal = randomerare.Next(minstaInmatning, högstaInmatning + 1); //Slumpar ett tal mellan 1-25.
int[] lottoBoll = new int[antalInmatningar]; //Skapar en vektor med 10 positioner.
for (int i = 0; i < lottoBoll.Length; i++) //For loop, så länge inte alla positioner INTE ännu har ett värde fortsätter loopen och adderar 1 när ett värde adderas.
{
Console.Write("Spela på nummer {0}: ", i + 1); //Håller användaren uppdaterad om hur många tal hen har matat in. +1 är för att i börjar på 0 men vi vill ha 1 först.
try //En try/catch metod för fel input.
{
lottoBoll[i] = int.Parse(Console.ReadLine()); // Matar in värdet och konverterar från string till int.
}
catch
{
Console.WriteLine("Vänligen ange ett heltal, försök igen."); //Om inmatningen inte går igenom skrivs meddelandet.
i--; //Vid fel input backar loopen ett steg, vi vill inte spara ett felaktigt värde i en position.
}
if (lottoBoll[i] < minstaInmatning || lottoBoll[i] > högstaInmatning) //Om det inmatade talet är under 1 eller över 25, meddelar vi om att användaren behöver ge ett nytt värde.
{
Console.WriteLine("Gränsen är nummer mellan 1 - 15 ,det där får du göra om.");
i--; //Vid fel input backar loopen ett steg, vi vill inte spara ett felaktigt värde i en position.
}
}
Console.Clear(); //Vi rensar konsolen ren för ny utdata.
bool bingo = false; //Vi sätter matchningen 'bingo' till falskt och loopen fortsätter tills 10 tal är inmatade.
for (int i = 0; i < lottoBoll.Length; i++) //For loop med samma värde som innan.
{
if (lottoBoll[i] == slumpTal) //Om ett tal matchar slumptalet ändras matchningen 'bingo' till true.
{
bingo = true;
}
}
Console.WriteLine("Här är alla dina val:");
string ja = "Bingo!"; //Meddelande utskrivet om bingo.
string nej = "ingen bingo."; //Meddelande utskrivet om ingen bingo.
foreach (int input in lottoBoll) //För varje input skrivs värdet ut.
{
Console.ForegroundColor = ConsoleColor.White; //Texten skrivs ut i vitt.
Console.Write("Lottoboll {0} blev ", input); //Skriver ut vilket dragningsnummer och om det blev bingo eller ej.
if (bingo)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(ja); //Om det blir bingo skrivs detta ut i grönt.
}
else if (!bingo)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(nej); //Om det inte blev bingo skrivs detta ut i rött.
}
}
if (bingo) //Om matchningen 'bingo' är true, om vi får bingo, får användaren veta det och vilket tal som var rätt.
{
Console.ForegroundColor = ConsoleColor.Green; //Texten skrivs ut i grönt.
Console.WriteLine("BINGO! Det rätta talet var {0}", slumpTal);
}
else //Annars får användaren veta att inget tal matchade slumptalet och vilket tal som var rätt.
{
Console.ForegroundColor = ConsoleColor.Red; //Texten skrivs ut i rött.
Console.WriteLine("Ingen bingo denna gång, det slumpade talet var {0}!", slumpTal);
}
Console.WriteLine("Spelet är slut!"); //Vi meddelar användaren att spelet/programmet är slut.
Console.ReadKey(); //Håller konsolen öppen efter avslut.
}
}
}
Felet med 'i' tidigare var nog att den inre loopen deklarerade om 'i', som redan fanns i den yttre loopen. C och C++ och troligen Java tillåter sådant.