就是 一个执行循序问题,先执行外面的循环:
1 for(int i=0i<10i++){
2 for(int j=0j<3j++) {
3 System.out.print("i*j="+i*j)
4 }
5 }
6 ....
....
当开始循环的时候,i=0,然后继续运行,j=0,输出i*j=0
此时循环从j=1,i仍旧为0 , j的值为2
输出结果为i*j=0,此时j++,j的值为2
循环从j=2,i仍旧为0 ,输出结果为i*j=0
当j=3,不满足j<3跳出内部for循环,执行外部for循环第二行代码,此时i++,i的值变为1
循环i=1, j=0时,结果为i*j=0
i=1,j=1 结果为i*j=1
当i循环到9,j=2是,输出循环结果为i*j=18
当i=10,不满足i<10,跳出外部循环,执行第6行
我只是拿一个例子给你讲解的,我像这样比给你讲解概念好理解。
一,在for循环中,循环控制变量的初始化和修改都放在语句头部分,形式较简洁,且特别适用于循环次数已知的情况。在while循环中,循环控制变量的初始化一般放在while语句之前,循环控制变量的修改一般放在循环体中,形式上不如for语句简洁,但它比较适用于循环次数不易预知的情况(用某一条件控制循环)。
二,foreach不是一个关键词,它指的是一种java里的循环方式,顾名思义代表对于每一个,表示每次给你要遍历的东西生成一个降维对象,然后访问。
比如说for(a:b),b是你要遍历的东西,每次循坏都会生成一个b的子集a,a是你自己命名的一个元素,在这个for里我们访问的就是这个a,每次循环都会访问一个新的a。
三,看你图里的代码,balances是二维数组,假设看成一个矩阵,我们需要一行一行遍历它,那么double[] row就是这个矩阵每行的意思。回到代码,for(double[] row:balances)就是指对于balances的每行row,同样的道理for(double b:row)的意思是对于每行row里的每个元素b,因为row是一维的数组,对它降维就是单个元素了。其中的row和b都是由你自己命名的,爱起什么名就起什么名,起完了名就可以在循环体里直接用了。遍历顺序就是顺序遍历,从前到后,跟你用i++,j++一样。
这种写法的好处在于,一是不需要管遍历的次数,二是你定义的子元素可以直接用,看起来比a[i]、a[j]方便。
for(int i=0i<10i++){/*第一层循环*/ for(int j=0j<10j++){/*第二层循环*/System.out.println("内容") }}先从外层 ——>i=0时,i<10成立,到内层 j=0,j=1,j=2...直到j=10,继续外层,i++i=1时,i<10成立,到内层 j=0 .......继续外层,i++i=10,i<10不成立,结束循环.
就一层一层执行呗。这个最好是debug一下自己看
但是通常项目开发里面都尽量保持在三个以下,不然就说明你的逻辑设计的不合理
看你设定的条件是循环几次呗。
我们就用for1,for2区分一下
for1(int i=0i<5i++){这里的循环执行5次,后跳出
for2(int j=0j<5j++){
我是for2循环体
}
这里for2运行的时候循环体执行5次,但是for1每次执行的时候都会让for2再执行一次,也就是说跳出for1的时候循环体一共执行了5x5=25次
}
其实看简单点,for2是for1的循环体,for2要执行5次,for2每执行一次,她的循环体就要执行5次
你只要明白一个for的循环体是怎么运转的就可以了,嵌套语句没什么特殊的,只不过它的循环体又是个for而已。