04-循环结构(续)
嵌套for循环
1、语法
for( 开始位置 ; 循环条件 ; 更改条件 ){ //外循环
for( 开始位置 ; 循环条件 ; 更改条件 ){ //内循环
循环体
}
}
2、案例分析
package cn.tedu.fordemo; //这个类用来测试 嵌套for public class Test2_For2 { public static void main(String[] args) { //总结1、外循环执行1次,内循环执行多次 //第一次循环,也就是当i=1时,输出了i的值1,并且输出j的所有值1 2 3 4 5 ,把i自增变成2 //第二次循环,也就是当i=2时,输出了i的值2,并且输出j的所有值1 2 3 4 5 ,把i自增变成3 //第三次循环,也就是当i=3时,输出了i的值3,并且输出j的所有值1 2 3 4 5 ,把i自增变成4,结束循环 for( int i = 1 ; i <= 3 ; i++ ) { //外循环,i= 1 2 3 System.out.println(i); for( int j = 1 ; j <= 5; j++) {//内循环 ,j = 1 2 3 4 5 System.out.println(j); } } //总结2、外循环控制行,内循环控制列 for( int i = 1 ; i <= 2 ; i++ ) {//外循环,执行2次 i = 1 2 for( int j = 1 ; j <= 3 ; j++ ) {//内循环,执行3次 j = 1 2 3 System.out.print("*");//同行展示 } System.out.println();//换行 } } }
练习:打印正方形
for(int i = 0 ; i < 5 ; i++) {//外循环控制行,执行5次,打印5行 for(int j = 0 ; j < 5 ; j++) { //内循环控制列,执行5次,打印5列 System.out.print("*");//同行展示 } System.out.println();//换行 }
练习:打印左直角三角形
package cn.tedu.fordemo; //这个类用来测试 嵌套for的练习 public class Test3_For2 { public static void main(String[] args) { //打印左直角三角形 //第一次循环时,i=1时,内循环: j = 1; j <= 1;此时j的取值范围就是=1, 打印*,换行。i自增变成2 //第二次循环时,i=2时,内循环: j = 1; j <= 2;此时j的取值范围就是=1 2, 打印**,换行。i自增变成3 //第三次循环时,i=3时,内循环: j = 1; j <= 3;此时j的取值范围就是=1 2 3, 打印***,换行。i自增变成4 //第四次循环时,i=4时,内循环: j = 1; j <= 4;此时j的取值范围就是=1 2 3 4, 打印****,换行。i自增变成5 //第五次循环时,i=5时,内循环: j = 1; j <= 5;此时j的取值范围就是=1 2 3 4 5, 打印*****,换行。i自增变成6 for(int i = 1 ; i <=5 ; i++) {//外循环控制行,执行5次,打印5行 for(int j = 1; j <= i ; j++) {//外循环控制列。问题是:列数不固定,需要跟随行i改变 System.out.print("*");//同行展示 } System.out.println();//换行 } } }
练习:打印99乘法表
//打印99乘法表 for (int i = 1; i <=9; i++) { for (int j = 1; j <=i; j++) { System.out.print(j+"*"+i+"="+j*i+"\t"); } System.out.println(); }
效果如下:
break和continue
--1、作用:用来结束循环
--2、区别:break简单粗暴立刻结束。continue结束这次继续下次。
a,break和continue都只能用于循环结构中,结束循环
b,break和continue之后不要再出现代码了,是不可到达的代码
测试:找数字
package cn.tedu.breakdemo; import java.util.Scanner; //这个类用来测试 结束循环 //找数字88 public class Test4_Break { public static void main(String[] args) { //循环结构,循环100次 for(int i = 0 ; i < 100 ; i++) { //1,接收100次,用户输入的整数 int input = new Scanner(System.in).nextInt(); //2,判断是不是88 if( input == 88 ) {//是88 System.out.println("中了"); //a,break和continue都只能用于循环结构中,结束循环 //b,break和continue之后不要再出现代码了,是不可到达的代码 break ; //循环结束,循环只要看到break就会立刻结束 }else {//不是88 continue ; //继续输入 } } } }
while循环:先判断再执行
--1、语法
while(循环条件){
循环体
}
--2、练习:猜数字
随机数的产生:new Random().nextInt(n): nextInt(m)--是指产生m以内的随机数,从0开始.
经典死循环:while(true) for(; ;) 都可以实现死循环,死循环必须要有合理的出口,使用break作为出口.
package cn.tedu.whiledemo; import java.util.Random; import java.util.Scanner; //这个类用来测试 循环结构 public class Test5_While { public static void main(String[] args) { // 猜数字 // 1、让程序产生随机数 // nextInt(m)--是指产生m以内的随机数,从0开始 int random = new Random().nextInt(100); System.out.println(random); //死循环只能用while吗?-- for行吗?--可以,只需要让循环条件永远成立! // for( int i = 1 ; i >= 1 ; i++ ) { while (true) { // 循环条件一直满足--true,经典的死循环。必须设置合理的出口!!!。 // while( random>50 ) {//循环条件可以自己决定 // 2、一直接收用户输入的整数 int input = new Scanner(System.in).nextInt(); // 3、开始比较 if (input > random) { System.out.println("大了"); } else if (input < random) { System.out.println("小了"); } else if (input == random) { System.out.println("中了"); break; // 给死循环设置出口!!! } } } }
do...while循环:先执行再判断
--1、语法
do{
循环体
}while(循环条件);
--2、改造猜数字
package cn.tedu.whiledemo; import java.util.Random; import java.util.Scanner; //这个类用来测试 循环结构 public class Test5_While { public static void main(String[] args) { // 猜数字 // 1、让程序产生随机数 // nextInt(m)--是指产生m以内的随机数,从0开始 int random = new Random().nextInt(100); System.out.println(random); do { // 循环条件一直满足--true,经典的死循环。必须设置合理的出口!!!。 // while( random>50 ) {//循环条件可以自己决定 // 2、一直接收用户输入的整数 int input = new Scanner(System.in).nextInt(); // 3、开始比较 if (input > random) { System.out.println("大了"); } else if (input < random) { System.out.println("小了"); } else if (input == random) { System.out.println("中了"); break; // 给死循环设置出口!!! } }while (true); } }
三种循环的区别
相同点:都可以解决 重复执行相同任务 的需求。所以三种循环之间可以互相替换。
不同点:
--for(开始位置;循环条件;更改条件):要求知道从哪儿开始,还有循环的次数。
--while(循环条件){循环体} : 只需要知道条件。
--do{循环体}while(循环条件) : 只需要知道条件,而且循环体最少执行1次。
--while 是先判断再执行
--do...while 是先执行再判断