12 svar
111 visningar
CJoy behöver inte mer hjälp
CJoy 24
Postad: 15 jul 2023 02:11

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.
        }
    }
}
anders_k 237
Postad: 15 jul 2023 09:21 Redigerad: 15 jul 2023 09:22

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;
CJoy 24
Postad: 15 jul 2023 12:09

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.
                }
            }
        }
    }
}
Laguna Online 30497
Postad: 15 jul 2023 12:15

Vilka rader pekar felmeddelandena ut? Kan du markera dem i koden?

Fermatrix 7841 – Fd. Medlem
Postad: 15 jul 2023 12:22

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.

CJoy 24
Postad: 15 jul 2023 12:28

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

Laguna Online 30497
Postad: 15 jul 2023 12:34

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.

Fermatrix 7841 – Fd. Medlem
Postad: 15 jul 2023 12:44
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.

CJoy 24
Postad: 15 jul 2023 12:46

precis efter clear() 

for (int i = 0;         får en CS0136

CJoy 24
Postad: 15 jul 2023 12:47

Det är precis det problemet jag försöker få bort Dracaena

CJoy 24
Postad: 15 jul 2023 13:06
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.
            }
        }
    }
}
CJoy 24
Postad: 15 jul 2023 14:32

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.
        }
    }
}
Laguna Online 30497
Postad: 15 jul 2023 15:49

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.

Svara
Close