Noob需要帮助才能摆脱循环

时间:2018-05-02 18:38:15

标签: c#

我很抱歉这是一个简单的问题,我刚刚开始。我创建了一些代码,允许用户输入一些随机骰子卷,并输出这些卷的总和。我现在被要求创建一个重复这些步骤的循环,包括提示,直到用户输入'quit'。我的问题是我的代码将字符串转换为整数,因此输入任何内容都会导致代码死亡。有关如何插入循环和中断的任何提示?我的代码是:

static void Main(string[] args)
{
    Random random = new Random();

    Console.WriteLine("Enter a number of dice to roll:");
    string numberDiceString = Console.ReadLine();
    int numberDice = Convert.ToInt32(numberDiceString);

    int total = 0;

    for (int index = 0; index < numberDice; index++)
    {
        int DieRoll = random.Next(6) + 1;
        total += DieRoll;
    }

    Console.WriteLine(total);
    Console.ReadKey();
}

5 个答案:

答案 0 :(得分:2)

我不会使用&#34; while(true)&#34;声明。正如有人在评论中指出的那样,我宁愿在那里使用正确的条件。 那就是说我会这样做:

static void Main(string[] args)
{
    Random random = new Random();
    string numberDiceString;
    int numberDice;
    Console.WriteLine("Enter a number of dice to roll:");
    while ((numberDiceString = Console.ReadLine()) != "quit")
    {
        bool parsed = int.TryParse(numberDiceString, out numberDice);
        if (!parsed)
        {
            //Handle the error. The user input was not a number or "quit" word
            break;
        }
        int total = 0;

        for (int index = 0; index < numberDice; index++)
        {
            int DieRoll = random.Next(6) + 1;
            total += DieRoll;
        }

        Console.WriteLine(total);
        Console.WriteLine("Enter a number of dice to roll:");
    }
}

我不得不说我喜欢这种方式,因为你可以很容易地看到循环何时停止。另外,我添加了一个你应该做的错误处理(如果用户输入任何不是数字的单词,会发生什么?)。

希望这有帮助。

答案 1 :(得分:1)

这种改变应该相当简单。你需要做的是创建一个while循环,然后在实际解析int之前进行检查。对此的伪代码就像是。

while(true) {
//Ask for input 
//Check if it equals "quit" 
//If so -> break; 
//If not convert to int
//For Loop for dice rolls
//Print Total
}

我确信它可能比这更优雅,你可能想要进行更多检查以确保无效输入不会使程序崩溃,但它应该完成工作。

答案 2 :(得分:0)

这是一个非常简单的解决方案,展示了如何解析用户输入。

using System;

namespace Simpleton
{
    class Program
    {
        static public int GetChoice()
        {
            int choice = 0;
            while (true)
            {
                Console.Write("Enter number of rolls or \"quit\" to finish: ");
                var answer = Console.ReadLine();
                if (String.Compare(answer, "quit", true) == 0)
                {
                    return 0; // Done
                }
                if (Int32.TryParse(answer, out choice))
                {
                    return choice;
                }
            }
        }

        static void Main(string[] args)
        {
            var choice = 0;
            while ((choice = GetChoice()) > 0)
            {
                Console.WriteLine($"You'll be looping {choice} times.");
                for (int tries = 0; tries < choice; tries++)
                {
                    // Looping
                }
            }
        }
    }
}

答案 3 :(得分:-1)

试试这段代码:

    static void Main(string[] args)
    {
        Random random = new Random();
        while(true)
        {
            String numberDiceString = "";
            int numberDice = 0;
            Console.WriteLine("Enter a number of dice to roll:");
            numberDiceString = Console.ReadLine();
            if (numberDiceString == "quit") { return; }
            int total = 0;
            if (Int32.TryParse(numberDiceString, out numberDice))
            {
                total = 0;

                for (int index = 0; index < numberDice; index++)
                {
                    int DieRoll = random.Next(6) + 1;
                    total += DieRoll;
                }
            }
            Console.WriteLine(total);
        }            
    }

答案 4 :(得分:-3)

我不是C#程序员,但您可以明确测试“退出”并使用goto

BeginLoop:
    Console.WriteLine("Enter a number of dice to roll:");
    string numberDiceString = Console.ReadLine();
    if (numberDiceString == "quit")
    {
        goto EndLoop;
    }
    int numberDice = Convert.ToInt32(numberDiceString);

    /* Rest of code you want to do per iteration */

    goto BeginLoop;

EndLoop: