即使满足条件也会中断循环
Breaks loop even if condition is met
我需要制作一个简单的程序,让用户输入他们是否想尝试用骰子在 3 次掷骰中获得 7、14 或 21。
我的 class 骰子看起来像这样:
class Dobbelsteen
{
private int zichtbaar; // value of dice
Random random = new Random();
public int getNummer //Show value of dice
{
get { return zichtbaar; }
}
public Dobbelsteen()
{
zichtbaar = 0;
}
public void Gooien()
{
zichtbaar = random.Next(1, 7);
}
}
这样应该没问题。
但现在我的主要部分出了问题;它问了 3 次,如果他们幸运的话,它会坏掉(好),但现在是失败的部分。
如果它不起作用,他们必须键入任何内容才能重试,但如果键入 0,它将停止。
在我的情况下,它总是坏掉。
class Program
{
static void Main(string[] args)
{
int gekozengetal; //Chosen number 7,14 or 21
Console.WriteLine("Je mag 3 keer met de dobbelsteen gooien. Wil je proberen 7, 14 of 21 te werpen?"); // Asks to give 7 14 or 21 to play;
gekozengetal = Convert.ToInt32(Console.ReadLine()); // saves that in this int;
while (gekozengetal== 7 || gekozengetal == 14 || gekozengetal == 21)
{
int opgeteld = 0; // this is the values combined of the rolls.
Dobbelsteen test = new Dobbelsteen();
Console.WriteLine("Druk om je eerste dobbelsteen te gooien");
Console.ReadKey();
test.Gooien();
opgeteld += test.getNummer;
Console.WriteLine("Je eerste Dobbel was" + opgeteld);
Console.WriteLine("Druk om je TWEEDE dobbelsteen te gooien");
Console.ReadKey();
test.Gooien();
opgeteld += test.getNummer;
Console.WriteLine("Je tweede Dobbel was" + test.getNummer +" samen is dit al" + opgeteld);
Console.WriteLine("Druk om je DERDE dobbelsteen te gooien");
Console.ReadKey();
test.Gooien();
opgeteld += test.getNummer;
Console.WriteLine("Je derde Dobbel was" + test.getNummer + " samen is dit al" + opgeteld);
if (opgeteld == gekozengetal)
{
Console.WriteLine("HOERA, GEWONNEN.");
Console.ReadKey();
break;
}
else
{
Console.WriteLine("Loser je moest" +gekozengetal +" hebben en je bent" +opgeteld + "uitgekomen"); // Too bad; you didnt get lucky
Console.WriteLine("WE GAAN OPNIEUW PROBEREN: DRUK 0 om te stoppen"); // Lets try again; press 0 to abort.
int opnieuw = Convert.ToInt32(Console.ReadKey()); // Opnieuw = again
if (opnieuw == 0)
{
break;
}
else
{
continue;
}
}
提前致谢。
根据 MSDN 文档,Console.ReadKey() returns 类型为 ConsoleKeyInfo 的对象。 Convert.ToInt32 不应该能够将该类型的对象转换为 int。因此,一旦您到达从控制台读取下一个键并尝试将其转换为 int 的部分,Convert.ToInt32 应该会抛出异常 (InvalidCastException)。
ConsoleKeyInfo 有一个 属性 "KeyChar" 保存作为字符按下的键。您可以检查它是否等于“0”并结束您的程序:
ConsoleKeyInfo kinfo = Console.ReadKey();
char keyPressed = kinfo.KeyChar;
if (keyPressed.Equals('0')
{
break;
}
else
{
continue;
}
首先,这段代码真的很难解释。但我想以下情况可能是罪魁祸首:
int opnieuw = Convert.ToInt32(Console.ReadKey()); // Opnieuw = again
if (opnieuw == 0)
{
break;
}
else
{
continue;
}
您看到'Console.ReadKey() returns class ConsoleKeyInfo 的一个对象,您不能直接将其转换为 int。我建议您将代码更改为以下内容:
ConsoleKeyInfo opnieuw = Console.ReadKey(); // Opnieuw = again
if (opnieuw == ConsoleKey.D0 || opnieuw == ConsoleKey.NumPad0)
{
break;
}
else
{
continue;
}
我需要制作一个简单的程序,让用户输入他们是否想尝试用骰子在 3 次掷骰中获得 7、14 或 21。
我的 class 骰子看起来像这样:
class Dobbelsteen
{
private int zichtbaar; // value of dice
Random random = new Random();
public int getNummer //Show value of dice
{
get { return zichtbaar; }
}
public Dobbelsteen()
{
zichtbaar = 0;
}
public void Gooien()
{
zichtbaar = random.Next(1, 7);
}
}
这样应该没问题。
但现在我的主要部分出了问题;它问了 3 次,如果他们幸运的话,它会坏掉(好),但现在是失败的部分。 如果它不起作用,他们必须键入任何内容才能重试,但如果键入 0,它将停止。 在我的情况下,它总是坏掉。
class Program
{
static void Main(string[] args)
{
int gekozengetal; //Chosen number 7,14 or 21
Console.WriteLine("Je mag 3 keer met de dobbelsteen gooien. Wil je proberen 7, 14 of 21 te werpen?"); // Asks to give 7 14 or 21 to play;
gekozengetal = Convert.ToInt32(Console.ReadLine()); // saves that in this int;
while (gekozengetal== 7 || gekozengetal == 14 || gekozengetal == 21)
{
int opgeteld = 0; // this is the values combined of the rolls.
Dobbelsteen test = new Dobbelsteen();
Console.WriteLine("Druk om je eerste dobbelsteen te gooien");
Console.ReadKey();
test.Gooien();
opgeteld += test.getNummer;
Console.WriteLine("Je eerste Dobbel was" + opgeteld);
Console.WriteLine("Druk om je TWEEDE dobbelsteen te gooien");
Console.ReadKey();
test.Gooien();
opgeteld += test.getNummer;
Console.WriteLine("Je tweede Dobbel was" + test.getNummer +" samen is dit al" + opgeteld);
Console.WriteLine("Druk om je DERDE dobbelsteen te gooien");
Console.ReadKey();
test.Gooien();
opgeteld += test.getNummer;
Console.WriteLine("Je derde Dobbel was" + test.getNummer + " samen is dit al" + opgeteld);
if (opgeteld == gekozengetal)
{
Console.WriteLine("HOERA, GEWONNEN.");
Console.ReadKey();
break;
}
else
{
Console.WriteLine("Loser je moest" +gekozengetal +" hebben en je bent" +opgeteld + "uitgekomen"); // Too bad; you didnt get lucky
Console.WriteLine("WE GAAN OPNIEUW PROBEREN: DRUK 0 om te stoppen"); // Lets try again; press 0 to abort.
int opnieuw = Convert.ToInt32(Console.ReadKey()); // Opnieuw = again
if (opnieuw == 0)
{
break;
}
else
{
continue;
}
}
提前致谢。
根据 MSDN 文档,Console.ReadKey() returns 类型为 ConsoleKeyInfo 的对象。 Convert.ToInt32 不应该能够将该类型的对象转换为 int。因此,一旦您到达从控制台读取下一个键并尝试将其转换为 int 的部分,Convert.ToInt32 应该会抛出异常 (InvalidCastException)。
ConsoleKeyInfo 有一个 属性 "KeyChar" 保存作为字符按下的键。您可以检查它是否等于“0”并结束您的程序:
ConsoleKeyInfo kinfo = Console.ReadKey();
char keyPressed = kinfo.KeyChar;
if (keyPressed.Equals('0')
{
break;
}
else
{
continue;
}
首先,这段代码真的很难解释。但我想以下情况可能是罪魁祸首:
int opnieuw = Convert.ToInt32(Console.ReadKey()); // Opnieuw = again
if (opnieuw == 0)
{
break;
}
else
{
continue;
}
您看到'Console.ReadKey() returns class ConsoleKeyInfo 的一个对象,您不能直接将其转换为 int。我建议您将代码更改为以下内容:
ConsoleKeyInfo opnieuw = Console.ReadKey(); // Opnieuw = again
if (opnieuw == ConsoleKey.D0 || opnieuw == ConsoleKey.NumPad0)
{
break;
}
else
{
continue;
}