Permalänk
Medlem

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.");
}

}
}
}

Permalänk

Tänk på vilken ordning programmet exekverar.

Permalänk
Medlem
Permalänk
Medlem

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.");
}

}
}
}

Permalänk
Medlem

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

Permalänk
Medlem

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);

Permalänk

@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)."); } } }

Permalänk
Medlem

@protovaffe: Det är C#