PrintStream out = System.out;
int sum = 0;
for(int i = 0; i<5; i++)
for(int j=i; j<5; j++)
sum++;
out.println(sum);
输出:15。我不知道这是怎么得到的15.我试着在头脑中解决它,我一直在25岁。
如果我们忽略第二个for循环,并将sum ++放在第一个for循环中,你就得到5.但是我们如何从第二个for循环获得15?
PrintStream out = System.out;
int sum = 0;
for(int i = 0; i<5; i++)
for(int j=i; j<5; j++);
sum++;
out.println(sum);
输出:1。如果放入会发生什么;在声明之后。它会停止吗?
答案 0 :(得分:6)
i = 0 => j goes from 0 to 4 => sum = 5
i = 1 => j goes from 1 to 4 => sum = 5 + 4 = 9
i = 2 => j goes from 2 to 4 => sum = 9 + 3 = 12
i = 3 => j goes from 3 to 4 => sum = 12 + 2 = 14
i = 4 => j goes from 4 to 4 => sum = 14 + 1 = 15
您的第二个代码段不能按原样编译。
修改强>
现在您的第二个代码段已编译:
for(int i = 0; i<5; i++)
for(int j=i; j<5; j++);
sum++;
相当于(这就是你应该总是使用大括号的原因):
for(int i = 0; i<5; i++) {
for(int j=i; j<5; j++) {
}
}
sum++;
这解释了为什么输出1。
答案 1 :(得分:0)
循环基本上是创建一个三角形数字,特别是第五个三角形数字,例如一些形式n + (n - 1) + ... + 2 + 1
。
诀窍以及 25 作为结果的原因是在第二个循环中:它只从当前<迭代< / em> i
的值,最高为5
。
在内循环的每次迭代中,总和递增一次。由于循环技巧,内循环迭代5次,然后是4,依此类推:
first iteration of the outer loop: j = 0 to 4 -> 5 increments
second iteration of the outer loop: j = 1 to 4 -> 4 increments
... 3 increments
... 2 increments
... 1 increment
5 + 4 + 3 + 2 + 1 = 15
答案 2 :(得分:0)
输出为15,因为在第一个循环的每次迭代中j
被初始化为i
的值。
如果j
初始化为零,则输出为25。
答案 3 :(得分:0)
要获得25,而不是
for(int j=i j<5; j++); // inner loop
sum++;
使用
//......here
for(int j=0 j<5; j++); // inner loop
sum++;
你现在在做什么
(1+1+1+1+1) + (1+1+1+1) + (1+1+1) + (1+1) + (1)
而你想要的是(1+1+1+1+1).. 5 times
P.S。为什么第二个代码中的循环是for(int j=il j<5; j++);
? il
未定义,即使您之前已在某处定义;
,它也会停在il
。