Hjälp med "gissa talet" uppgift

Trädvy Permalänk
Medlem
Registrerad
Aug 2019

Hjälp med "gissa talet" uppgift

Hej,

Jag försöker få in en detalj "else if" sats där det säger "det bränner" när man har gissat väldigt nära slumptalet. Har någon några tips till hur jag kan utveckla programmet? Hälsn Viquta

using System;

namespace ConsoleApp11
{
class Program
{
static void Main(string[] args)
{

int nr;
string str;
int gissningar = 0;
Random randomerare = new Random();
int slumpTal = randomerare.Next(1, 101);

Console.WriteLine("Gissa på ett tal mellan 1 till 100 och ange det i siffror : ");
str = Console.ReadLine();
nr = int.Parse(str);

do
{
if (nr < slumpTal)
{
Console.WriteLine("Du gissade för lågt!");
Console.WriteLine("Gissa igen : ");
str = Console.ReadLine();
nr = int.Parse(str);
}
else if (nr > slumpTal)
{
Console.WriteLine("Du gissade för högt");
Console.WriteLine("Gissa igen : ");
str = Console.ReadLine();
nr = int.Parse(str);
}
else if (nr == slumpTal++)
{
Console.WriteLine("det bränner");
Console.WriteLine("Gissa igen : ");
str = Console.ReadLine();
nr = int.Parse(str);
}
else if (nr == slumpTal--)
{
Console.WriteLine("det bränner");
Console.WriteLine("Gissa igen : ");
str = Console.ReadLine();
nr = int.Parse(str);
}
gissningar++;
} while (nr != slumpTal);

if (nr == slumpTal)
{
Console.WriteLine("Grattis! Du gissade rätt!");
Console.WriteLine("Du gissade " + gissningar + " gånger.");
}

}
}
}

Trädvy Permalänk
Medlem
Registrerad
Aug 2018

Tänk på vilken ordning programmet exekverar.

Trädvy Permalänk
Medlem
Registrerad
Aug 2019
Trädvy Permalänk
Medlem
Registrerad
Aug 2019

Skrev såhär nu:

det funktar! Jag är glad för det. men finns det sätt där jag kan skriva om så att det blir mindre kod?
using System;

namespace ConsoleApp11
{
class Program
{
static void Main(string[] args)
{

int nr;
string str;
int gissningar = 0;
Random randomerare = new Random();
int slumpTal = randomerare.Next(1, 101);

Console.WriteLine("Gissa på ett tal mellan 1 till 100 och ange det i siffror : ");
str = Console.ReadLine();
nr = int.Parse(str);

do
{
if (nr < slumpTal && nr + 1 == slumpTal)
{
Console.WriteLine("Det bränner!");
Console.WriteLine("Gissa igen : ");
str = Console.ReadLine();
nr = int.Parse(str);
}
else if (nr < slumpTal)

{
Console.WriteLine("Du gissade för lågt!");
Console.WriteLine("Gissa igen : ");
str = Console.ReadLine();
nr = int.Parse(str);
}
else if (nr > slumpTal)
{
Console.WriteLine("Du gissade för högt");
Console.WriteLine("Gissa igen : ");
str = Console.ReadLine();
nr = int.Parse(str);
}
else if (nr > slumpTal && nr - 1 == slumpTal)
{
Console.WriteLine("Det bränner!");
Console.WriteLine("Gissa igen : ");
str = Console.ReadLine();
nr = int.Parse(str);
}
gissningar++;
} while (nr != slumpTal);

if (nr == slumpTal)
{
Console.WriteLine("Grattis! Du gissade rätt!");
Console.WriteLine("Du gissade " + gissningar + " gånger.");
}

}
}
}

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Mar 2013

Du kan även tänka på att när något bränner så menar du, om jag förstått det rätt, att talet du gissat är en ifrån det korrekta. Det är egentligen samma fall, och du kan uttrycka det som ett absolut avstånd.

Det blir dock viktigt med ordningen av if-satsen även då.
Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Registrerad
Dec 2002

Skriv gärna koden inom "code" taggar.

Hittade ett problem. Tänk riktigt noga på vad dessa rader gör. Specifikt ++ och -- operationerna.

else if (nr == slumpTal++) else if (nr == slumpTal--)

För att få koden kortare så kanske följande inte behöver ligga i var if. Kan du bryta ut denna logiken?

Console.WriteLine("Gissa igen : "); str = Console.ReadLine(); nr = int.Parse(str);

Trädvy Permalänk
Medlem
Registrerad
Apr 2006

@viquta: Jag har aldrig skrivit C++ så följande kanske innehåller några fel, men jag skulle göra något i stil med följande:

namespace ConsoleApp11 { class Program { static void Main(string[] args) { int guess; int guesses = 1; Random randomizer = new Random(); int correctNumber = randomizer.Next(1, 101); Console.WriteLine("Gissa på ett tal mellan 1 till 100 och ange det i siffror : "); guess = int.Parse(Console.ReadLine()); while (guess != correctNumber) if (guess + 1 == correctNumber || guess - 1 == correctNumber) { Console.WriteLine("Det bränner!"); } else if (guess < correctNumber) { Console.WriteLine("Du gissade för lågt!"); } else { Console.WriteLine("Du gissade för högt"); } Console.WriteLine("Gissa igen : "); guess = int.Parse(Console.ReadLine()); guesses++; } Console.WriteLine("Grattis! Du gissade rätt!"); Console.WriteLine("Du gissade " + guesses + " gång(er)."); } } }

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Aug 2013

@protovaffe: Det är C#