Java for循环

分享到:

for循环在Java开发过程中随处可见,用来执行一组重复性的操作。比如让计算机重复输出3次"Hello World",也许有人会说直接写3行System.out.print("Hello World")不就行了吗。那么问题来了,如果要重复输出10000次呢?难到要写10000行代码,答案是肯定不需要。for循环就是专门解决此类问题的。先看一张for循环的结构图,如下所示:

java for循环结构图

for循环的应用场景非常多,本文通过几个常用实例来说明for循环的具体用法,主要包括以下几个例子:
(1) 简单的for循环
(2) for循环控制变量递增
(3) for循环控件变量递减
(4) 通过for循环给数组元素赋值
(5) 通过for循环读取数组各元素的值
(6) foreach循环结构
(7) break语句在for循环中的作用
(8) continue语句在for循环中的作用
(9) for循环的嵌套,打印一个99乘法口诀表

(1)简单的for循环,代码如下:

for(int i=0; i<3; i++){
    System.out.print("Hello World \n");
}

//执行结果如下:

Hello World
Hello World
Hello World

按照for循环的执行顺序图把这个例子拆分成以下几个步骤:
(1)for循环参数初始化, int i=0; 例子中定义了一个int类型的变量 i 并赋值为 0
(2)for循环判断条件表达式的值是否为true,例子中给出的条件是 i<3,循环前3次变量i的值分别是 0,1,2 满足 i<3 的条件
(3)执行循环操作,例子中的循环体只有一行代码 System.out.print("Hello World \n"); 在屏幕上输出 Hello World 然后换行(注: \n 是换行符)
(4)更新循环变量的值,本例每次循环给变量i的值+1
综上所述,前3次循环变量i的值都小于3因此表达式i<3始终返回true,当循环进行到第4次时变量i的值已经等于3了,因此不再满足 i<3 的条件,这时表达式i<3 将返回false ,循环体中的代码不被执行for循环结束。所以System.out.print("Hello World \n");这行代码会被执行3次,在屏幕上会看到3个 Hello World。

上面的例子已经说明了for循环的原理,在java开发中经常使用for循环处理一些递增或递减的工作,下面通过例子来说明。

(2)for循环控制变量递增
假设存在银行的钱平均每天能给你带来50元的利息,问连续10天可以产生多少利息?

int money=0;
for(int i=1; i<=10; i++){
    money+=50;
}
System.out.print(money + "元");

//执行结果: 500元

变量money在循环体中不断的被重新赋值,每次循环在原值上增加50。 money+=50; 这行代码相关于 money=money+50;

再举一个细胞分裂的例子,假设某种细胞每分钟分裂一次,由一个变成两个。问:在不考虑细胞死亡的情况下第4分钟时一共有几个细胞?

int xb=1;
for(int i=1; i<=4; i++){
	if(i>1){
		xb=xb*2;
	}
}
System.out.print(xb + "个");

//执行结果:8个

在这个例子中用变量xb代表细胞个数初始值为1,用变量i代表时间,因为第一分钟时细胞是不分裂的所以需要先判断变量i的值是否大于1,如果大于1才能在原基础上乘2

(3)for循环控制变量递减
前面几个例子for循环参数都是由小变大,这次我们看一个循环参数由大变小的例子,例如依次输出5,4,3,2,1这几个数字,代码如下:

for(int i=5; i>0; i--){
	System.out.print(i + "\n");
}

//执行结果如下:

5
4
3
2
1

到这里我们已经明白了for循环的基本原,在java开发中for循环最常用的场景是用来理处理数组,那么问题就来了:如何通过for循环给数组中的元素依次赋值?如何把一个数组所有元素值依次输出呢?接下来举例说明:

(4)通过for循环给数组元素赋值

int[] a=new int[4];
for(int i=0; i<4; i++){
    a[i]=i+1;
}

通过上面的代码已经完成了数组元素赋值的过程,首先定义一个int类型的数组变量a ,a包含4个元素,然后我们设置循环变量 i 从0开始(因为数组元素的下标索引也是从0开始的,变量i可以当做数组下标使用),最后我们依次给各元素赋值1,2,3,4 因为i从0开始所以在赋值时需要a[i]=i+1 而不是直接 a[i]=i,否则各元素的值将是0,1,2,3

(5)通过for循环读取数组元素的值

//本段代码写在赋值循环的下面

for(int i=0; i<a.length; i++){
    System.out.print("a[" + i + "]=" + a[i]+ "\n");
}

//执行结果如下:

a[0]=1
a[1]=2
a[2]=3
a[3]=4

注:a.lenght 表示返回数组a包含元素的总个数, 在本例中a.lenght将返回 4, 所以 i<a.lenght 也可以用 i<4 来代替
当数组各元素赋值完毕之后,通过 "数组变量[下标序号]" 的形式就可以轻松得到对应的值了,如果只想获取某个区间的元素只需调整变量 i 的值即可,例如只想获中间两个元素的值可以改成 for(int i=1 ; i<4; i++) ,
利用for循环操作数组通常利用 for语句中的条件变量值与数组各元素的下标序号进行对应,数组各元素的值与下标之间的关系图如下所示:

for循环

(6)foreach循环结构
for循环有一个变形结构,可以更简单的输出数组序列,也就是java中所谓的foreach结构。这种结构的关键字仍然是for而不是foreach,好处是无需知道数组元素的具体个数就可以对其进行操作,举个例子:

int[] a={1,2,3,4};
for(int aa:a){
	System.out.print(aa+"\n");
}

//执行结果如下:

1
2
3
4

foreach结构非常适合在不知道元素总数的情况下读取数组中的元素,并且这种读取是连续的。foreach的便利性同时它的局限所在,因为不知道元素的总个数就不能用下标的方式读取指定的元素值,因为你设置的下标很可能不存在从而造成下标越界的错误。
注:例子中for(int aa:a)的作用是将数组a中的元素值依次转换到int类型的变量aa中,元素下标索引从0开始每次循环自动向后移1位,直到遍历所有元素

(7)break语句在for循环中的作用
上面几个例子都是一次循环到底,中途没有其它情况发生,如果我们想在for循环某个特定位置退出就需要使用break语句进行中断,举例说明:

for(int i=0; i<5; i++){
	if(i==3){
		break;
	}
	System.out.print(i + "\n");
}

//执行结果如下:

0
1
2

本例关键代码是 if(i==3){break;} 这段代码,我们人为的在循环体中设置了一个逻辑判断,当变量 i 等于3时执行一次break语句,此时按照变量i<5的逻辑还有两次循环没有完成,但是后面的3 , 4并没有输出到屏幕上,说明此时for循环已经提前结束了。在for循环中一但执行了break语句就会立即结束整个循环,这就是break语句的作用,能够提前结束一个for循环体。了解更多break语句在java中的作用。

(8)continue语句在for循环中的作用
我们已经知道通过执行break语句可以提前结束for循环,那么问题来了,如果想在循环过程中跳过某些特定情况而不是直接退出for循环又该如果处理呢? 请看下面这个例子:

for(int i=0; i<5; i++){
	if(i==1 || i==4){
		continue;
	}
	System.out.print(i + "\n");
}

//执行结果如下:

0
2
3

通过运行结果可以看到,只输出了0,2,3 这几个数字,1,4这两个数字并没有输出。这是因为我们在循环体中设置了一个逻辑,当变量 i 等于1或4的时候执行 continue; 语句,在for循环中一但执行了continue语句就会跳出本次循环忽略后面的代码,直接进入下一次循环。

(9)for循环的嵌套
所谓for循环嵌套是指在一个循环结构中包含另一个循环结构,在java开发中循环的嵌套也是经常使用的一种技巧。下面我们通过实例了解for循环嵌套的使用方法,例如在屏幕上打印一个九九乘法口诀表,先看代码:

for(int a=1; a<=9; a++){
	for(int b=1; b<=a; b++){
		System.out.print(b + "*" + a +"="+ b*a +" ");
	}
	System.out.print("\n");
}

//执行结果如下:

1*1=1 
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

for循环嵌套相比之前的结果稍微复杂一点,它的执行顺序是这样的:先从最外层的父循环开始,进入子循环后直到子循环执行结束后父循环才会更新循环参数进入下一次循环,以此类推直到结束。for循环可以嵌套很多层,但原理都是一样的,开始由外向内逐层进入,结束由内向外逐层退出。也就是说:在for嵌套结构中越早执行的结束的越晚,越晚执行的结束的越早。

昵    称:
验证码:

相关文档: