大侠们说了很多,不知道楼主是否明白
成都创新互联公司服务项目包括宿豫网站建设、宿豫网站制作、宿豫网页制作以及宿豫网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,宿豫网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到宿豫省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
我再解释一下
首先
1、为什么k执行了两次后会重新变成0
因为你可以看出,这里使用了三层循环
也就是for循环了三层
而k=0;k2;k++在最里面,也就是
j=0;j2;j++
当j从0开始,那么要执行里面的代码,也就是for(k=0;k2;k++)
当for(k=0;k2;k++)执行完成后,往上一级回看,这个时候没有满足j=2,那么就继续执行,也就是j++,然后在执行for(k=0;k2;k++)
这样反复执行
直到j=2为止,那么for(k=0;k2;k++)在往上一级回看,看i是否大于等于2
如果是的话那么将结束循环,不是的话,将继续执行for(j=0;j2;j++),因为执行了for(j=0;j2;j++),那么他要执行下面的话,也就是for(k=0;k2;k++)
这个时候k又被赋值为0
讲了一下,才发现很简单的东西想要说的清楚其实也不容易,老师辛苦啦
只要理解了嵌套循环这个就很好理解了,嵌套循环外层的循环每执行一次,内层循环完全遍历一遍
图中代码,i=1
退出循环条件为i=9,就是说外层循环执行遍历9次
第一次循环的时候i=1,内层循环j=1
退出循环条件为j=i,i=1
j=1
内层循环执行一次,打印出一个
*
后退出内层循环,外层循环代码继续执行到第8行,打印一个回车
然后外层循环执行第二次,i=2,由内层循环条件J=i得出
本次内层循环执行两次,打印两个
*
然后退出,外层循环打印一个回车,完成第二次遍历,依次类推
每次多打印一个*,外层循环第9次执行完毕后退出
控制台留下
*
**
***
****
*****
******
*******
********
*********
for(i=0;i3;i++) { //.... for(j=0;j=i;j++) { //... } } 1、给 i 赋值。 2、判断i3是否成立,成立则执行第一个for循环语句快的代码(此时i=0)。 3、到内循环时再同第1、2步(此时j=0,j=i成立)执行内循环代码。 3、第一次内循环结束后执行j++,再判断j=i是否成立(此时j=1),条件不成立。内循环结束。如果内循环后面不再有代码就执行i++(此时i=1)。 4、再重复2-3步,直到i=3时整个循环执行完成。 不知道讲明白没有,有什么问题可以联系我。
举个例子 香烟见过吧
第一层for循环相当于一条烟那个包装盒,里面有4包香烟(实际10包)
第二层for循环相当于一包烟那个包装盒,里面四根香烟(实际20根)
x=0 相当于这条烟里面的第一包烟 拿出来
然后 就在这一包烟里面 一根一根抽出来,
抽之前, 此时 x=0(第一包烟) y=4(包中有四根烟)
抽出一根, 此时 x=0 (还是第一包烟 ) y=3(抽出了一根)
再抽出一根,此时 y=2 (抽出了第二根) 条件不符合(y2)
第二层循环结束
然后继续拿第二包香烟(x=1)
然后 就在这一包烟里面 一根一根抽出来
然后 步骤同上
以此类推
.......
.
就是 一个执行循序问题,先执行外面的循环:
1 for(int i=0;i10;i++){
2 for(int j=0;j3;j++) {
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,不满足j3跳出内部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,不满足i10,跳出外部循环,执行第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]方便。
代码如下:
public class App {
public static void main(String[] args) {
int n = 9;
for (int i = 0; i n; i++) {
int m = ((n / 2) - Math.abs(i - (n / 2))) * 2 + 1;
for (int j = 0; j m; j++) {
int l = (m / 2) - Math.abs(j - (m / 2));
System.out.print((char)('A' + l));
}
System.out.println();
}
}
}
运行结果: