为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕侠2389804 2022-07-23 17:08:07
从数组中查找最大值时,为什么要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);
查看完整描述

4 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

如果您只在块内递增,i 那么if只要条件x[i] > max评估为false,i就不会递增。并且由于我们使用i作为要检查的数组元素的索引,因此值x[i]永远不会改变,因此循环将永远持续下去。


而且,就其价值而言,当您迭代数组时,for循环更合适,因为它允许您在一个地方定义迭代变量、条件和增量:


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

int max = x[0];


for(int i = 1; i < x.Length; i++)

{

    if (x[i] > max) max = x[i];

}


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


查看完整回答
反对 回复 2022-07-23
?
烙印99

TA贡献1829条经验 获得超13个赞

如果你 i++ 在 if 块内,你进入一个无限循环:(


        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();


查看完整回答
反对 回复 2022-07-23
?
holdtom

TA贡献1805条经验 获得超10个赞

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

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

i++那么如何在块内找到最大值。您if将陷入无限循环。


查看完整回答
反对 回复 2022-07-23
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

如果将它放在 if 块中,我只会在最大值增加时递增,如果数组中的每个值都大于之前的值,则让 while 循环永远运行。



查看完整回答
反对 回复 2022-07-23
  • 4 回答
  • 0 关注
  • 77 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信