Java中循环语句的用法及嵌套
文章目录
前言
循环结构可以在满足循环条件的情况下,控制某一段代码重复的执行。这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要控制把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。
Java开发中,循环结构的实现有三种形式:依次是for循环语句,while循环语句,do-while循环语句。下面我们依次来讲解每种循环的格式和具体使用。
1,for循环格式
for(初始化语句; 循环条件; 迭代语句){
循环体语句;
}for(初始化语句; 循环条件; 迭代语句){
循环体语句;
}
执行流程如下
循环开始的时候,先执行初始化语句,然后判断循环条件,如果循环条件返回true,则执行循环体语句。
然后执行迭代语句,然后判断循环条件,如果循环条件返回true.则执行循环体语句。
然后执行迭代语句,然后判断循环条件,如果循环条件返回true.则执行循环体语句。
…
然后执行迭代语句,然后判断循环条件, 如果循环条件返回false.当前循环结束。
案例入门-输出6行语句
public static void main(String[] args) {
//控制台输出6次HelloWorld,不使用循环
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("-------------------------");
//用循环改进,循环6次
//定义变量从0开始,循环条件为<6
for(int i = 0; i < 6; i++) {
System.out.println("HelloWorld"+x);
}
}
使用for循环是不是简繁快捷很多呢,有没有。
流程解释如下
初始化语句是int i = 0 ; 这行语句只会在循环开始的时候执行一次,然后执行循环条件i<6,因为此时i=0,所以循环条件此时是0<6返回true,程序进入循环体语句输出第一行语句"HelloWorld0";
紧接着执行迭代条件i++,此时i=1,然后执行循环条件 1<6返回true,程序进入循环体语句输出第二行语句"HelloWorld1";
紧接着执行迭代条件i++,此时i=2,然后执行循环条件 2<6返回true,程序进入循环体语句输出第三行语句"HelloWorld2";
紧接着执行迭代条件i++,此时i=3,然后执行循环条件 3<6返回true,程序进入循环体语句输出第四行语句"HelloWorld3";
紧接着执行迭代条件i++,此时i=4,然后执行循环条件 4<6返回true,程序进入循环体语句输出第五行语句"HelloWorld4";
紧接着执行迭代条件i++,此时i=5,然后执行循环条件 5<6返回true,程序进入循环体语句输出第六行语句"HelloWorld5";
紧接着执行迭代条件i++,此时i=6,然后执行循环条件 6<6返回false,当前循环结束。
for循环的注意事项:
1.初始化语句执行1次
2.循环使用的变量只在for循环范围内有效。(仅对于在for循环范围内定义的变量)
接下来也是一个案例
打印一个1-100之间的偶数和
public static void main(String[] args){
// 1.输出 1到 100
// 3.定义一个变量求和
int count = 0 ;
for(int i = 0 ; i < 100 ; i++ ){//当然也可以初始化为1
// i : 0 - 99
// i+1 : 1 - 100
int data = i+1 ; // 2.选出偶数,偶数对2求余的结果一定是0.
if(data % 2 == 0){
//System.out.println(data);
count+=data; // 累加求和。
}
}
System.out.println("求和:"+count);
}
for循环常见的错误
待更新
2.循环语句-while
初始化语句;
while(循环条件) {
循环体语句;
迭代语句;
}
执行流程如下
while循环的执行流程其实与for循环的流程是完全一样的,大家完全可以参考for循环的流程来理解while循环的流程。
循环开始的时候,先执行初始化语句,然后判断循环条件,如果循环条件返回true,则执行循环体语句。
然后执行迭代语句,然后判断循环条件,如果循环条件返回true.则执行循环体语句。
然后执行迭代语句,然后判断循环条件,如果循环条件返回true.则执行循环体语句。
…
然后执行迭代语句,然后判断循环条件, 如果循环条件返回false.当前循环结束。
案例如下--------输出6行语句
pu
blic static void main(String[] args){
/*
for(int i = 0 ; i < 6 ; i++ ){
System.out.println("helloWorld"+i );
}
*/
// while在此处的应用于for循环相比较只是写法上有差异,功能流程是完成一样的。
int i = 0 ;
while(i < 6){
System.out.println("helloWorld"+i );
i++;
}
}
案例如下--------输出1-100之间的基数和
public static void main(String[] args){
// 1.输出 1到 100
// 3.定义一个变量求和
int count = 0 ;// 初始化语句
int i = 0 ;
while( i < 100 ){
// i : 0 - 99
// i+1 : 1 - 100
int data = i+1 ; // 2.选出奇数,奇数对2求余的结果一定是1.
if(data % 2 == 1){
//System.out.println(data);
count+=data; // 累加求和。
}
i++;
}
System.out.println("求和:"+count);
}
while循环常见的错误
- int i要放在外面声明
while (int i<7) {
i++;
System.out.println(“i is “+i);
}
- java判断处为boolean类型,应该如j==3,j>1之类才行
;不像C中,0可以表示假,非0可以表示真。java的真假就是true和false以及判别式。
int j=3; while(j) {
System.out.println(“ j is “+j);
}
while的留意事项
1、防止让循环的条件变成永真或者永假,不然的话可能没意义;
2、千万不要在while后面加;
3、while循环后面的大括号能够省略,假如省略,只能影响离它最近的那句代码,并且,这句代码不能够是声明变量的;
4、while语句块里面定义的变量,外面不能。
3.do-while循环
初始化语句;
do {
循环体语句;
迭代语句;
} while(循环条件);
执行流程如下
do-while循环的执行流程与for循环和while循环的流程是有差异的,do-while循环一来就会执行一次循环体语句。详细流程如下:
循环开始的时候,先执行初始化语句,然后直接执行循环体语句。
然后执行迭代语句,然后判断循环条件,如果循环条件返回true.则执行循环体语句。
然后执行迭代语句,然后判断循环条件,如果循环条件返回true.则执行循环体语句。
…
然后执行迭代语句,然后判断循环条件, 如果循环条件返回false.当前循环结束。
案例入门-输出6行语句
public static void main(String[] args) {
int i=0;
do {
System.out.println("HelloWorld");
i++;
} while(x< 6);
}
do-while循环的特点:
无条件执行一次循环体,即使我们将循环条件直接写成false,也依然会循环一次。这样的循环具有一定的风险性,因此初学者不建议使用do…while循环。
public static void main(String[] args) {
do {
System.out.println("无条件执行一次");
} while(false);
}
do-while循环常见的错误
待更新
4.嵌套循环执行形式
所谓嵌套循环,是指一个循环的循环体语句中又包含了另一个循环。比如for循环里面还有一个for循环,就是嵌套循环。总共的循环次数=外循环次数*内循环次数
嵌套循环格式如下:
//for的示例演示
for(初始化语句; 循环条件; 迭代语句) {
...// 其他语句
for(初始化语句; 循环条件; 迭代语句) {
循环体语句;
}
...// 其他语句
}
嵌套循环执行原理
外循环每次执行一次,内循环要完整执行完所有次。
public static void main(String[] args){
// 1.循环的嵌套
for(int i = 0 ; i < 3 ; i ++ ){
// i = 0 j = 0 1 2 3 4
// i = 1 j = 0 1 2 3 4
// i = 2 j = 0 1 2 3 4
for(int j = 0 ; j < 5 ; j++ ){
System.out.println(i + "=>"+j);
}
}
}
案例演示:你做错事,你老婆罚你每天说三句我爱你,连续说三天
public static void main(String[] args){
// 1.循环的嵌套
for(int i = 0 ; i < 3 ; i ++ ){
for(int j = 0 ; j < 3 ; j++ ){
System.out.println("我爱你"+i+"-->"+j);
}
}
}
这样是不是很容易理解呢,嘿嘿。😁
5.死循环
死循环:也就是循环中的条件永远为true,死循环是永不结束的循环。
在后期的开发中,会出现使用死循环的场景,例如:在做聊天程序的时候,服务器要一直不间断的接收你发送的消息,服务器可以使用死循环一直去接收用户发送的消息。
常见的死循环形式有:
while(true){
//一直被重复执行的语句
}
或者可以使用for循环的改写形式实现死循环:
for(;;){
// 一直被重复执行的语句
}
其中while(true){}实现死循环的形式使用较多。大家在实现死循环的时候,如果需要停止死循环程序,可以通过点击Ctrl+C实现。
也可以通过在死循环中使用break关键字实现循环的结束。
6.break关键字
我们使用for循环和while循环可以让程序重复执行代码.但是有时候我们可能在循环的中途需要让循环结束执行.需要使用break关键字。
break使用场景:跳出循环,让循环提前结束
break使用注意事项
-
在选择结构switch语句中
-
在循环语句中
-
离开使用场景的存在是没有意义的。
结束当前循环
- break用哪个循环中,默认就会结束当前所在的哪个循环。
public static void main(String[] args) {
for (int i = 1; i<=10; i++) {
System.out.println("HelloWorld" + i);
//需求:打印完三次HelloWorld之后结束循环
if(i == 3) {
break; // 结束循环
}
}
}
7.结束外部循环
在开发中有一些极特殊的业务场景可能需要在嵌套循环中结束外部循环,而我们知道 break默认只能结束当前循环,如果要在内部循环中结束外部循环怎么处理呢,可以使用在外部循环上申明(定义)标记,格式如下:
标记 : // 标记是合法的标识符,建议大写,也可以叫循环名。
然后通过break 标记来结束指定的外部循环,格式如下:
break 标记; // 结束标记所在的循环。
案例演示:
OUTER: // 标记,可以随便写!
for(int i = 0 ; i < 5 ; i++ ){
for(int j = 0 ; j < 3 ; j++){
System.out.println("行"+i + " 列:"+j);
if(j == 1){
// break默认只能结束当前内部循环
// 如果要在内部循环中结束外部循环怎么处理呢?
// 可以采用break 标记;
break OUTER;
}
}
}
8.continue关键字
使用场景:立即结束循环的本次循环,继续循环的下一次的执行。
continue使用注意事项
- 必须放在for循环或while循环中
- 离开使用场景的存在是没有意义的。
结束当前循环的当次循环
/*
continue:立即结束循环的本次循环,继续循环的下一次的执行。
必须放在for循环或while循环中
*/
public class Demo02continue {
public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
if (i == 3) {
continue; // continue后面的代码不执行.继续下次循环
}
System.out.println("HelloWorld" + i);
}
}
}
9.结束外部循环的当次循环
在开发中有一些极特殊的业务场景可能需要在嵌套循环中结束外部循环的当次执行,而我们知道 continue默认只能结束当前循环的当次执行,如果要在内部循环中结束外部循环的当次执行怎么处理呢,可以使用在外部循环上申明(定义)标记,格式如下:
标记 : // 标记是合法的标识符,建议大写,也可以叫循环名。
然后通过continue 标记来结束指定的外部循环的当次执行,格式如下:
continue 标记; // 结束标记所在的循环。
案例演示:
public static void main(String[] args){
OUT:
for(int i = 0 ; i < 5 ; i++ ){
for(int j = 0 ; j < 4 ; j++){
System.out.println("开始:i="+i +" , j=" + j);
if(j == 2){
//continue ; // 结束当次循环,继续内部循环的下一次执行!
continue OUT; // 结束外部循环的当次循环,进入外部循环的下一次执行!
}
System.out.println("结束:i="+i +" , j=" + j);
}
}
}
案例演示:
//执行完2后,程序会跳到1处。
int i, j;
Loop1: // 1
for ( i=0; i<20; i++ ) {
for ( j=0; j<i*i; j++ ) {
if ( j*2 ==i )
break Loop1; // 2
}
i=4; // 3
}
i=5; // 4
10.Java: 增强for循环(for-each循环)
在 JDK
5.0 中添加了一个新的特性—— for-each 循环。它是一种更加简洁的 for 循环,也称为 增强for循环 。
案例演示:
//使用for-each循环遍历的数组必须初始化
int i;
Scanner sc = new Scanner(System.in);
int[] a = new int[3];
for (i = 0;i < a.length;i ++){
a[i] = sc.nextInt();
}
i = 0;
for (int k : a){
System.out.println(k);
}
String[] b = new String[3];
for (i = 0;i < b.length;i ++){
b[i] = sc.next();//也可以用nextLine
}
i = 0;
for (String k : b){
System.out.println(k);
}
使用 增强for循环 需要注意它的局限性:在遍历集合和数组时,只能访问集合中的元素,不能对其中的元素进行修改(删除、添加等)。
static String [] strs = {"aaa","bbb","ccc"};
public static void main(String[] args) {
//增强for循环
for(String str : strs) {
str = "ddd" ;
}
System.out.println("foreach循环修改后的数组:"+strs[0]+","+strs[1]+","+strs[2]);
//for循环遍历数组
for(int i=0;i<strs.length;i++) {
strs[i]="ddd";
}
System.out.println("for循环修改后的数组:"+strs[0]+","+strs[1]+","+strs[2]);
}
观察运行结果,从运行结果可以看出, 增强for循环 并不能修改数组中元素的值。
foreach循环修改后的数组:aaa,bbb,ccc
for循环修改后的数组:ddd,ddd,ddd
其原因是:其中str = "ddd"
语句只是将临时变量str
指向了一个新的字符串,这和数组中的元素没有一点关系。而在 普通for循环 中,是可以通过索引的方式来引用数组中的元素比将其值进行修改。
增强型for循环注意事项
1.在使用增强型for循环不支持遍历时删除元素 。
2.使用增强型for循环时,对遍历的集合需要做null判断,不然可能引发空指针异常。
参考资料:
一键直达车