Java循环结构
第一节:循环结构
1.1 什么是循环
循环就是在循环条件满足的情况下,反复执行特定代码。
1.2 为什么要使用循环
当我们要打印100次helloworld
或者我们想实现1-10的和
1+2+3+4+5....
int sum = 0;
sum = sum + 1;
sum = sum + 2;
sum = sum + 3;
sum = sum + 4;
sum = sum + 5;
可以发现有一些是相同的内容。这些相同的内容我们就可以采用循环的方式来实现
1.3 循环的分类
- while 循环
- do/while 循环
- for循环
4.循环的组成部分
- 初始化部分:对循环变量赋初值
- 循环条件部分:判断循环条是否为true,则执行,否则不执行。
- 循环体部分:要循环执行的具体逻辑.
- 更新循环变量部分:修改循环变量的值
第二节 : while循环
2.1 格式:
while (boolean表达式) {语句块}
2.2 执行过程
先判断表达式的值。若为true.则执行循环体,然后再次判断条件并反复执行,直到条件不成立为止。
特点:先判断再执行。
2.3.1 练习一:需求: 打印输出5次helloworld
// 初始化部分
int count = 0;
// 2循环条件
while(count<5){// 1 2 3
//3循环体
System.out.println("hello world");
//4更新循环变量
count++;
}
2.3.2 练习二:需求 : 打印输出 1–10
int i =1;
while(i<=10){
System.out.println(i);
i++;
}
2.3.3练习三:求1-100的和
//1初始化变量
int i=1;
int sum=0;//保存和
//2循环条件
while(i<=100){
sum=sum+i;//sum+=i;
i++;
}
System.out.println("1-100的和是:"+sum);
2.3.4 练习四:需求 : 求 10 的阶乘
int sum = 1;
int j = 1;
while(j<=10){
sum=sum*j;
j++;
}
System.out.println("10的阶乘"+sum);
2.3.5 练习五:求 100以内的 偶数的和
int z=2;
int sum=0;
while(z<=100){
sum=sum+z;
z+=2;
}
System.out.println("1-100的偶数的和是:"+sum);
或
int z=1;
int sum=0;
while(z<=100){
if(z%2==0){
sum=sum+z;
}
z++;
}
System.out.println("1-100的偶数的和是:"+sum);
第三节: do-while循环
3.1格式
do {语句块}while(表达式) ;
3.2 执行过程
先执行语句,再判表达式的值,若为true,再执行语句,否则结束循环。
特点:先执行,再判断。
3.3.1 练习: 打印三次helloworld
// 1 初始化部分
int i = 0;
do{
// 2 循环体
System.out.println("Hello World!");
// 4 循环变量变化部分
i++;
}while(i<3);// 3 循环条件
3.3.2 用do/while实现打印100以内的奇数
int j = 1;
do{
/*if(j%2==1){
System.out.println(j);
}
j++;*/
System.out.println(j);
j+=2;
}while(j<100);
3.3.3 100 以内能够被3整除 但是不能被5整除的数打印输出
int z = 3;
do{
if(z%3==0 && z%5!=0){
System.out.println(z);
}
z++;
}while(z<=100);
3.4 while 和 do-while的区别
while 和 do/while 的区别:
while 先执行循环条件,然后在执行循环体,一句话:先判断,再执行
do/while 先执行循环体 然后在执行循环条件,一句话:先执行,再判断
当第一次 就不满足循环条件的情况下 while循环不能执行循环体, do while 可以执行一次
第四节 : for循环
4.1 格式
for (表达式1 [循环变量初始化]; 表达式2 [循环条件判断]; 表达式3 [更新循环变量的值]){
循环体
}
4.2 执行过程
首先计算表达式1,接着计算表达式2,若表达式2的值为true,则执行循环体,接着计算表达式3,再判断表达式2的值.依此重复下去,直到表达式2的值=false。
特点:先判断,再执行。
4.3.1 练习: 需求: 打印输出3次helloworld
for(int i = 0;i<3;i++){
System.out.println("Hello World!");
}
4.3.2 练习: 打印100以内 能被4整除,不能被7整除的数据,每行打印6个
int count = 0;
for(int i = 1; i<=100; i++){
if(i%4==0 && i%7!=0){
System.out.print(i+"\t");
count++;// 6
if(count%6==0){
System.out.print("\n");
}
}
}
4.4 for循环的特殊形式
1. 表达式2一般不可省略,否则为无限循环(死循环)
for (i=1; ; i++) sum=sum+i;
// 相当于条件永真、永不为false
2. 表达式3亦可省略,但在循环体中须有语句修改循环变量;以使表达式2在某一时刻为false而正常结束循环。
for (int sum=0,i=1 ;i<=100; ){
sum=sum+i;
i++;
}
3. 若同时省略表达式1和表达式3,则相当于while(表达式2)语句
int i=0;
for ( ; i<=100; ) {sum+=i; i++;}
4. 三个表达式均省略 即for(;;)语句,此时相当于while(true)语句.
4.5 三种循环的比较和注意事项
三种循环的比较:
1 语法不一样
while(条件){...}
do{...}while(条件);
for(表达式1;表达式2;表达式3){...}
2 执行顺序
while 和 for 都是先判断条件 ,然后再执行循环体
do while 先执行循环体,再判断条件
注意事项
1. 对于同一问题, 三种循环可相互替代。
2. 循环次数确定的情况优先选用for循环,循环次数不确定的情况,通常选用while和do-while循环。
3. 要防止无限循环––死循环。
第五节 :多重循环:二重循环
多重循环就是循环中嵌套其他循环。
特点:外层循环执行一次,内层循环执行一遍。
5.1 练习一:
使用*号打印矩形。
// 外层循环控制行 内层循环 控制列
// *******
// *******
// *******
// *******
for (int j = 0;j<4 ; j++){
for(int i = 0; i< 7 ; i++){
System.out.print("*");
}
System.out.println();
}
5.2 练习二:
打印直角三角形
/*
找规律
* 1 1
** 2 2
***
****
***** 5 5
*/
for (int i = 1;i<=5 ;i++ ){
// 1 2 3 4 5
for (int j = 1;j<=i ;j++ ){
System.out.print("*");
}
System.out.println();
}
5.3 练习三:
输出等腰三角形
[外链图片转存失败(img-3hlPZbcO-1562643125439)(images/001.png)]
* 1 1 1*2-1
*** 2 3 2*2-1
***** 3 5 3*2-1
******* 4 7 4*2-1
********* 5 9 5*2-1
* 1 4 5-1=4
*** 2 3 5-2=3
***** 3 2 5-3=2
******* 4 1 5-4=1
********* 5 0 5-5=0
for (int i = 1;i<=5 ;i++ ){
//空格
for(int k=1;k<=5-i;k++){
System.out.print(" ");
}
// 1 2 3 4 5
for (int j = 1;j<=i*2-1 ;j++ ){
System.out.print("*");
}
System.out.println();
}
5.4 练习四:
输出九九乘法表
*
**
***
****
*****
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
// 99乘法表
for (int i = 1;i<=9 ;i++ ){
for (int j = 1;j<=i ;j++ ){
System.out.print(i+"*"+ j+"="+i*j+"\t");
}
System.out.println();
}
第六节: 跳转语句–流程控制语句
**break:**语句用于终止某个语句块的执行
**continue:**语句用于跳过某个循环语句块的一次执行,继续下一次执行(结束本次循环,继续下一次循环)
6.1 break
-
使用场合
- switch结构中:跳出(终止)switch语句
- 循环结构中:跳出(终止)循环
-
作用:退出switch和循环结构(如果有多重循环,默认跳出离自己最近的循环)。
for (int i = 1; i <3 ; i++ ){ for (int j = 1;j<5 ;j++ ){ if(j == 2){ break;// 可以指定 跳出的循环 } System.out.println(i+" "+j); } }
使用Lable标签实现跳出指定的循环。(了解)q
out : for (int i = 1; i <3 ; i++ ){//定义一个标签out
for (int j = 1;j<3 ;j++ ){
if(j == 2){
break out;// 可以指定 跳出的循环
}
System.out.println(i+" "+j);
}
}
上机练习1:
打印1到10个数,遇到4的倍数程序自动退出
提示:如果i%4==0,则执行break命令
6.2 continue
- 使用场合
- continue只能用在循环结构中
- 作用: 跳过本次循环,执行下一次循环(如果有多重循环,默认继续执行离自己最近的循环)。)
for (int i = 1;i<4 ;i++){
for (int j = 1;j<4 ;j++ ){
if(j==2){
continue;
}
System.out.println("i="+i + " j="+j);
}
}
System.out.println("Hello World!");
使用Label标签改变继续执行的循环
out: for (int i = 1;i<4 ;i++ ){
for (int j = 1;j<4 ;j++ ){
if(j==2){
continue out ;
}
System.out.println("i="+i + " j="+j);
}
}
System.out.println("Hello World!");