java的循环语句
for循环
含义:条件成立就重复执行
好处:减少了代码的冗余(减少重复性的代码)
语法结构: for(表达式1;表达式2;表达式3){ ...代码块... } 理解: 表达式1:初始化变量 表达式2:判断条件 表达式3:更新变量 执行流程: 1.初始化变量 2.判断条件:判断条件的结果必须是boolean 2.1 true - 执行代码块,并更新变量,重复第2个步骤 2.2 false- 跳出整个循环语句 for循环变形记: 循环中声明变量的作用域只能在循环内 在循环中i++和++i没有区别 例: int i = 1; for(;i<=5;){ System.out.println("用良心做教育"); //i++; ++i; } System.out.println(i);//6 案例1:输出1~9数字中的奇数 //解决方案1 for(int i = 1;i<10;i+=2){ System.out.println(i); } //解决方案2 for(int i = 1;i<10;i++){ if(i%2!=0){ System.out.println(i); } } 案例2:循环录入某同学的5门课成绩,计算平均分 Scanner scan = new Scanner(System.in); double sum = 0;//总成绩 for(int i = 1;i<=5;i++){ System.out.println("请输入第" + i + "门成绩:"); double score = scan.nextDouble(); sum += score;//累加 } System.out.println("平均分为:" + (sum/5));
总结:i可以从1开始也可以从0开始,更新变量可以递增也可以递减
死循环:(应该避免的) for(;;){ System.out.println("用良心做教育"); } 伪死循环:i超过取值范围时,值会变成负数(应该避免的) for(int i = 0;i>=0;i++){ System.out.println("用良心做教育"); }
for循环嵌套
需求:九九乘法表
//方案一 for(int i = 1;i<=9;i++){ for(int j = 1;j<=i;j++){ System.out.print(j + "x" + i + "=" + (i*j) + "\t"); } System.out.println(); } //方案二 for(int i = 1;i<=9;i++){ for(int k = 1;k<i;k++){ System.out.print("\t"); } for(int j = i;j<=9;j++){ System.out.print(i + "x" + j + "=" + (i*j) + "\t"); } System.out.println(); }
while循环
知识点:while循环 语法结构: while(表达式){ ...代码块... } 理解: 表达式的结果必须是boolean true - 执行代码块 false- 跳出循环 死循环: while(true){ System.out.println("死循环"); } while循环变形记:while循环可以表示for循环 int i = 0; while(i < 5){ System.out.println("用良心做教育"); i++; }
do-while循环
知识点:do-while循环
语法结构:
do{
...代码块...
}while(表达式);
理解:
表达式的结果必须是boolean
true - 执行代码块
false- 跳出循环
执行顺序:
1.先执行一遍代码块
2.判断表达式
2.1 true - 执行代码块,再重复第2个步骤
2.2 false- 跳出循环
死循环:
do{
System.out.println("死循环");
}while(true);
案例:小明参加学校组织的歌咏比赛,大赛在即,
老师建议:先彩排一次,如果很令人满意,
以后就不用彩排了,否则每天都排,直到现场表现满意为止!
Scanner scan = new Scanner(System.in);
String str;
do{
System.out.println("小明:旋转、跳跃,我闭着眼~~~");
System.out.println("小明:老师,您满意了吗?");
str = scan.next();
}while(str.equals("不满意"));
特殊的流程控制语句
1.break 作用:
- 作用于循环中,表示跳出当前循环
- 作用于switch中,跳出switch分支语句
2.continue 作用:
作用于循环中,表示跳过当前循环剩余的部分,进入到下一次循环
3.return 作用:
作用于方法中,表示结束该方法
4.lable的运用
可给循环起别名
1.break
作用:
作用于循环中,表示跳出当前循环
作用于switch中,跳出switch分支语句
做实验:
while(true){
System.out.println("111");
System.out.println("222");
if(true){
break; // 后面的语句不会执行
}
System.out.println("333");
System.out.println("444");
}
案例:循环录入某同学5门课的成绩并计算平均分,如果某分数录入为负停止录入并提示。
Scanner scan = new Scanner(System.in);
double sum = 0;
boolean flag = true;//true-5次正常录入 false-有输入负数的情况
for(int i = 1;i<=5;i++){
System.out.println("请输入第" + i + "门成绩:");
double score = scan.nextDouble();
if(score < 0){
flag = false;
break;
}
sum+=score;
}
if(flag){
double avg = sum/5;
System.out.println("平均分为:" + avg);
}else{
System.out.println("分数为负数,停止录入");
}
2.continue
作用:作用于循环中,表示跳过当前循环剩余的部分,进入到下一次循环
做实验:
while(true){
System.out.println("111");
System.out.println("222");
if(true){
continue;
}
System.out.println("333");
System.out.println("444");
}
案例:循环录入Java课5名学生的成绩,统计分数大于等于80分的学生比例。
Scanner scan = new Scanner(System.in);
int num = 0;//记录成绩大于等于80分学生的人数
for(int i = 1;i<=5;i++){
System.out.println("请输入第" + i + "名学生的成绩:");
double score = scan.nextDouble();
if(score < 80){
continue;
}
num++;
}
System.out.println("分数大于等于80分的学生比例为:" + (num/5.0*100) + "%");
3.return
作用:作用于方法中,表示结束该方法
做实验:
System.out.println("111");
System.out.println("222");
if(true){
return;
}
System.out.println("333");//无效语句
System.out.println("444");//无效语句
4.知识点:lable的面试题
描述下列代码第几行报错?
答:不会报错,// 后面为注释
http://www.baidu.com
for(int i = 0;i<5;i++){
System.out.println("用良心做教育");
}
知识点:lable的运用
需求:嵌套for循环,外层循环5次,内层循环3次,
外层循环到第3次时,在内层循环中退出外层循环
a:for(int i = 1;i<=5;i++){
for(int j = 1;j<=3;j++){
System.out.println(i + " -- " + j);
if(i == 3){
break a;
}
}
}
for vs while vs do-while
循环共同点:判断条件的结果都是boolean值,true-循环 false-跳出循环
执行顺序的区别:
for:先判断,再执行
while:先判断,再执行
do-while:先执行一遍,再判断
语法结构的区别:
for(初始化变量;判断条件;更新变量){}
while(判断条件){}
do{}while(判断条件);
应用场景的区别:
循环次数确定:for
循环次数不确定,先判断,再执行:while
循环次数不确定,先执行一遍,再判断:do-while