如何解决这个循环?

时间:2013-10-26 15:37:48

标签: c# loops

我的简单代码有问题。我想要做的是:例如,如果用户只提供否定数字而不是正数,那么我想看看:

"this is not valid"

Do you want to try again <y/n>?

我已经尝试了很多组合if if if if但是我没有看到"do you want to try again?"或者我看到它们和结果。

这是无效的,最大值是:0

这不好。

int invoer;
int max;
string repeat;

Console.WriteLine("Please give a positive number.\nIf you enter a negative number its not going to work");

do
{
    invoer = 0;
    max = 0;
    repeat = "";

    for (int i = 1; invoer >= 0; i++)
    {
        Console.Write(i + "> ");
        invoer = int.Parse(Console.ReadLine());

        if (max < invoer)
            max = invoer;
    }

    Console.WriteLine("Maximum value is: " + max);
    Console.WriteLine("do you want to try again? y/n: ");
    repeat = Console.ReadLine();
} while (repeat == "y" || repeat == "Y");

3 个答案:

答案 0 :(得分:2)

我为你编辑了这段代码。它向用户询问无限时间的正值。如果输入的值是最大值,它只给出最大值。如果价值为负,它不会给出最大值...我相信这是你想要的吗?

然而,这段代码太可怕了。我用它修好了。如果它不是您正在寻找的东西,那么只需废弃它并开始新的,因为它运行方式的丑陋使得运行起来比它应该更难。

如果这是答案,那么请检查。

    int invoer;
    int max;
    string repeat;

    Console.WriteLine("Please give a positive number.\nIf you enter a negative number its not going to work");

    do
    {
        invoer = 0;
        max = 0;
        repeat = "";

        for (int i = 0; invoer >= 0; i++)
        {
            Console.Write(i + "> ");
            invoer = int.Parse(Console.ReadLine());

            if (max < invoer)
            {
                max = invoer;
                Console.WriteLine("Maximum value is: " + max);
            }
        }

        if (invoer < 0)
        {
            Console.WriteLine("This is not valid...");
        }


        Console.WriteLine("do you want to try again? y/n: ");
        repeat = Console.ReadLine();
    } 
    while (repeat == "y" || repeat == "Y");
}
}
}

答案 1 :(得分:0)

您应该使用uint.TryParse而不是int.Parse。它不接受负数,也不会在无效输入上抛出异常。

答案 2 :(得分:0)

如果你不能使用int.TryParse,你可以在解析它之前始终确保你的输入是数字:

var input = Console.ReadLine();
var number = !string.IsNullOrWhiteSpace(input) ? input : "0";

var numeralExpression = new System.Text.RegularExpressions.Regex(@"^(\d|-\d)$");

if (numeralExpression.IsMatch(number))
{
    invoer = int.Parse(number);
}