从数组中查找最大值时,为什么要在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);
答案 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循环将永远运行。