嵌套循环澄清 - 编辑

时间:2016-05-01 21:53:31

标签: java

我是一名简介Java学生,我正在为期末考试而学习。我在重复声明循环上进行了先前的测验,看到一个我错了的答案,无法弄清楚为什么答案就是这样。

有人可以告诉我为什么z = 29在下列情况下(而不是25)?我的教授说错了,说它是29,但没有解释。

int z = 0;
for(int x=0; x<5;x++){
    for(int y=0; y<5;y++){
        z++;
    }
    z++;
}

z--;

我能够获得29的唯一方法是内循环执行5次(外循环相同,因此,5*5=25加上4?此外我也是在我的IDE中执行此操作,当我尝试system.out.println(z);

时,控制台打印出来
4
8
12
16
20

(所以我现在相当困惑)非常感谢您提供的任何帮助。

6 个答案:

答案 0 :(得分:1)

您的代码片段:

int z = 0;
for(int x=0; x<5;x++){
    for(int y=0; y<5;y++){
        z++;
    }
    z++;
}
z--;

确实导致z等于29。让我们计算每个部分z的差异。对于外循环的每次迭代,内部for循环迭代五次:

for(int y=0; y<5;y++){
    z++;
}

基本上等于:

z += 5;

我们因此将程序重写为:

int z = 0;
for(int x=0; x<5;x++){
    z += 5;
    z++;
}
z--;

现在z += 5;z++等于z += 6;。我们将程序重写为:

int z = 0;
for(int x=0; x<5;x++){
    z += 6;
}
z--;

for循环再次重复五次,因此z的更新为:z += 5*6;z += 30;。我们将程序重写为:

int z = 0;
z += 30;
z--;

最后,我们将三个陈述合并为一个:int z = 0+30-1;

int z = 29;

答案 1 :(得分:0)

int z = 0;
// iterate 5 times
for(int x=0; x<5;x++){
    // iterate 5 times
    for(int y=0; y<5;y++){
        // z=z+1  
        z++;
    }
    // z=z-1
    z--;
}

数学上z = 5 *(5 *(+ 1)-1)

然后z = 20

答案 2 :(得分:0)

对于x中的每个增量,它遍历内部循环5次。并且对于x的每个增量...总共加起来5次......它减去了一个......

因此,

5 *(5 + 1)-1 = 29。

答案是20而不是29.除非你有拼写错误。

答案 3 :(得分:0)

你确定是29而不是20吗?教授有时会有误导性的写作风格。

问题的答案应为20

int z = 0;
for(int x=0; x<5;x++) //0 1 2 3 4  this loop will run 5 times
{ 
    for(int y=0; y<5;y++)//0 1 2 3 4  this loop will run 5 times
    { 
        z++; 
    }
    z--;
}

答案是:     z =外循环*(内循环 - 减量)     z = 5 *(5 - 1)     z = 20

答案 4 :(得分:0)

正确答案是20.也许他或她的20在标记时看起来像29。

答案 5 :(得分:0)

随着内部for循环的每次迭代,z增加1.随着外部for循环的每次迭代,z减少1.

每次内循环循环五次,z增加五。

每次外循环完成一个循环时,z减1,内循环循环5次,因此,对于外循环的每次迭代,z递增4。

外环循环五次=&gt; (z + = 4)* 5 =&gt; Z = 20

<强> 被修改

随着内部for循环的每次迭代,z增加1.对于外部for循环的每次迭代(不包括内部循环),z也会增加

每次内循环循环五次,z增加五。

每次外循环完成一个循环时,内循环循环五次,z增加一,因此,随着外循环的每次迭代, z增加6

外环循环五次=&gt; (z + = 6)* 5 =&gt; Z = 30

最后,你在最后减去了一个,与loop =&gt;无关。 z = 30 - 1 = 29