for 循环中的嵌套 if/else 语句未按预期工作

时间:2021-04-02 13:09:03

标签: c# for-loop if-statement

在嵌套在 IF/ELSE 循环中的 for 语句中,我找不到我的错误所在。我确实尝试使用 while 循环来使我的 IF/ELSE 语句起作用,但它没有按预期工作。

即使是我的 Console.Writeline 声明也无法捕捉到正确的价格和尺寸。

我的代码:

static void Main(string[] args)
{
    string[] size = { "S", "M", "L", "X"};
    decimal[] price = { 6.99M, 8.99M, 12.50M, 15.00M};

    Console.WriteLine("Please enter a pizza size : ");
    string pizzaSize = Console.ReadLine();

    int i;

    for (i = 0; i < size.Length; i++)
    {
        if (size[i] == pizzaSize)
        {
            Console.WriteLine("Your pizza size is " + pizzaSize + ". The price is " + price[i].ToString("C"));
        } else
        {
            Console.WriteLine("Please enter a valid pizza size");
            return;
        }
    }
    Console.ReadKey();
}

3 个答案:

答案 0 :(得分:11)

如果 pizzaSize 的值为 "L" ,则在 for 循环中,第一个检查将是 if ("L" == "M"),即 false 然后 {{1} } 分支在第一次迭代中执行,else 子句中的 return; 导致函数立即返回。所以如果要检查 else 值是否有效,可以使用以下解决方案:

pizzaSize

答案 1 :(得分:2)

else 块会在每次测试条件为假时执行,这至少会执行 3 次,即使条件为真,也就是如果您没有 return 语句,则不会允许循环继续,一旦代码命中 else,它将立即返回并退出程序。

给定的答案已经解决了这些问题,我要更改的是比较,您希望代码能够识别输入的大小写,使用 Equals 将是一种更可靠的方法:

static void Main(string[] args)
{
    string[] size = { "S", "M", "L", "X" };
    decimal[] price = { 6.99M, 8.99M, 12.50M, 15.00M };

    Console.Write("Please enter a pizza size : ");
    string pizzaSize;
    var exists = false;

    while (!exists && (pizzaSize = Console.ReadLine()) != null)
    {
        for (int i = 0; i < size.Length; i++)
        {
            if (size[i].Equals(pizzaSize, StringComparison.OrdinalIgnoreCase))
            {
                Console.WriteLine("Your pizza size is " + size[i] + ". The price is " + price[i].ToString("C"));
                exists = true;
                break;
            }
        }
        if (!exists)
        {
            Console.Write("Please enter a valid pizza size: ");
        }
    }
    Console.ReadKey();
}

还有一些细微的调整,使您的 I/O 更加用户友好。

答案 2 :(得分:1)

看来,您在第一个不匹配时返回 else 分支,因此离开了整个函数。

有几种方法可以修复您的代码。在不涉及太多代码的情况下,您可以在 if 分支中的 WriteLine 之后引入 break 语句以离开循环(您已经完成,无需检查其他大小)并在 else 中添加额外的 if 语句-分支,包装其内容,以检查当前循环迭代是否是最后一次。如果是最后一次迭代,仍然不匹配,则只能是无效大小。

但实际上,最好使用简单的 switch-case 而不是手动迭代。