为什么要输入i ++?在if块之外?

时间:2019-01-15 23:57:53

标签: c# arrays if-statement while-loop max

从数组中查找最大值时,为什么要在i++块外面键入if

int[] x = new int[] { 5, 7, -100, 400, 8 };

int i = 1;
int max;

max = x[0];

while (i < x.Length)
{
    if (x[i] > max)
    {
        max = x[i];
    }
    i++;
}
Console.WriteLine("MAX="+max);

5 个答案:

答案 0 :(得分:4)

如果仅在i块内将if 内加1,则条件x[i] > max的计算结果为false时,{{1 }}不会增加。而且由于我们使用i作为要检查的数组元素的索引,因此i的值将永远不会改变,因此循环将永远持续下去。

就其价值而言,当您遍历数组时,x[i]循环更合适,因为它允许您将迭代变量,条件和增量全部定义在一个位置:

for

答案 1 :(得分:1)

如果您在if块中使用i ++,则会进入无限循环:(

        while (i < x.Length)
        {
            if (x[i] > max)
            {
                max = x[i];
                i++;
            }                
        }

假设此数组x = new int [] {9,8}

i = 1
max = 9
while ( 1 < 2 ){//and 1<2 is always true i=1 and x.length=2
     if ( 8 > 9){ //false, never enter
       max = 8
       i++  //never happens, i is always 1
     }    
}

如果索引有问题,可以使用“ foreach”而不是“ while”

        int[] x = new int[] { 5, 7, -100, 400, 8 };
        int max;

        max = x[0];
        foreach (int elem in x)
        {
            if (elem > max)
                max = elem;
        }

        Console.WriteLine("MAX=" + max);
        Console.ReadLine();

答案 2 :(得分:0)

让我们假设您的数组是否包含以下值

int[] x = new int[] { 2, 2, 2, 2, 2 };

然后如何在i++块中使用if找到最大值。您将陷入无限循环。

答案 3 :(得分:-1)

应将i++增量放在if语句之外(就像您在共享代码中所做的一样),以避免发生这种情况创建无限循环场景的过程。

if语句有可能被评估为false,因此i的值不会增加,因此while循环将无限期进行。当x数组中的下一个整数小于或等于数组中先前访问的任何整数时,就会发生这种情况。

保持i++语句的if增量 outside 可以确保在每次循环期间执行该语句。

答案 4 :(得分:-1)

如果将其放在if块中,则i仅在max增加时才会递增,如果数组中的每个值大于之前的值,则while循环将永远运行。