即使满足条件,也会中断循环

时间:2015-01-06 14:12:49

标签: c# loops

我需要制作一个简单的程序,让用户输入,如果他们想要尝试使用骰子在3卷中获得7,14或21。

我的班级骰子看起来像这样:

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

}

提前谢谢。

2 个答案:

答案 0 :(得分:1)

首先,解释这段代码真的很难。但我想以下情况可能是罪魁祸首:

int opnieuw = Convert.ToInt32(Console.ReadKey()); // Opnieuw = again
if (opnieuw == 0)
{
    break;
}
else
{
    continue;
}

你看到' Console.ReadKey()返回一个ConsoleKeyInfo类的对象,你不能直接转换为int。我建议您将代码更改为以下内容:

ConsoleKeyInfo opnieuw = Console.ReadKey(); // Opnieuw = again
if (opnieuw == ConsoleKey.D0 || opnieuw == ConsoleKey.NumPad0)
{
    break;
}
else
{
    continue;
}

答案 1 :(得分:0)

根据MSDN文档,Console.ReadKey()返回ConsoleKeyInfo类型的对象。 Convert.ToInt32不应该能够将该类型的对象转换为int。因此,只要您到达从控制台读取下一个键的部分并尝试将其转换为int,Convert.ToInt32就会抛出异常(InvalidCastException)。

ConsoleKeyInfo有一个属性" KeyChar"它保存了作为char按下的键。您可以检查它是否等于' 0' 0并结束你的计划:

ConsoleKeyInfo kinfo = Console.ReadKey();
char keyPressed = kinfo.KeyChar;
if (keyPressed.Equals('0')
{
    break;
}
else
{
    continue;
}