目前我正在攻读Java测试。惠斯特学习我遇到了一个小问题。
在这个for循环中:
for ( int i=1; i <= 3 ; i++ ) {
for (int j=1; j <= 3 ; j++ ) {
System.out.println( i + " " + j );
}
}
输出结果为:
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
我的问题是,我不明白。当我读到这段代码时,我一直认为它应该是这样的:
1 1
2 2
3 3
为什么不是这样?
答案 0 :(得分:14)
i的每次迭代,你都开始了一个全新的j迭代。
所以,你从i == 1开始,然后在循环中以j == 1,2,3开始。然后我= = 2,然后在循环中j == 1,2,3,等等。
一步一步地完成它,这将是有意义的。
答案 1 :(得分:6)
你拥有的是另一个循环。把它想象成时针上的分针和时针。分针即将到来(1,2,3,4 ... 59),而时针仍然是1.因此,如果我们将小时视为i,将分钟视为j,我们有:
1 1
1 2
1 3
...
1 60
然后时间变为2,分针一直在四处走动:
2 1
2 2
2 3
...
2 60
一旦我们到达
,我们就完成了 12 1
12 2
12 3
...
12 60
这是循环结束的地方。你的例子很像这样。
(对于迂腐,我知道它是从零开始的,但为了说明,这可能更容易理解)
答案 2 :(得分:3)
让我们来看看如果我们从循环变为重复代码会是什么样子。首先是外循环:
for (int j=1; j <= 3 ; j++ ) {
System.out.println( 1 + " " + j );
}
for (int j=1; j <= 3 ; j++ ) {
System.out.println( 2 + " " + j );
}
for (int j=1; j <= 3 ; j++ ) {
System.out.println( 3 + " " + j );
}
现在是内循环:
// First loop
System.out.println( 1 + " " + 1 );
System.out.println( 1 + " " + 2 );
System.out.println( 1 + " " + 3 );
// Second loop
System.out.println( 2 + " " + 1 );
System.out.println( 2 + " " + 2 );
System.out.println( 2 + " " + 3 );
// Third loop
System.out.println( 3 + " " + 1 );
System.out.println( 3 + " " + 2 );
System.out.println( 3 + " " + 3 );
现在有意义吗?
答案 3 :(得分:1)
外部用于“抓住”内部并迭代IT。 即,你在for循环中有一个for循环。对于1..3范围内的每个i,您还必须从1..3循环j。当我变为2时,j重置为1,内循环再次运行。
答案 4 :(得分:1)
你在另一个循环中有一个循环。
因此,对于外部循环的每次迭代,您将运行内部循环以完成,从1开始,结束于3。
所以你最终为i的每个值打印j = 1,2,3。在这种情况下,我是1,2和3。
答案 5 :(得分:1)
对于外循环的每次迭代,将执行完整的内循环。 例如,当i = 1时,内循环将执行3次,你就会得到 1 1 1 2 1 3
答案 6 :(得分:1)
每次嵌套for循环(当你将一个放在另一个循环中时调用它),它基本上会添加另一个“维度”。如果你有一个for循环,它就像一条直线。因此,如果我们的第一个循环是1到5,那么它将是:
1 2 3 4 5
如果你添加第二个循环,(比方说1-3)(你从上到下从左到右阅读,第一个数字代表第一个变量,等等)
11 21 31 41 51
12 22 32 42 52
13 23 33 43 53
如果你添加第三个循环(让我们说1-2)(我显然不能在这里制作3个维度,所以请耐心等待)
111 211 311 411 511 || 112 212 312 412 512
121 221 321 421 521 || 122 222 322 422 522
131 231 331 431 531 || 132 232 332 432 532
因此,迭代的总次数(通过循环的次数)是循环的乘积。这个是3 * 5 * 2,所以它将迭代30次。