目录
- 一、for循环
- 二、for循环嵌套
- 三、while循环
- 四、do-while循环
- 五、for vs while vs do-while
- 六、特殊的流程控制语句
一、for循环
1.语法结构:
for(表达式1;表达式2;表达式3){
...代码块/循环体...
}
表达式1 -> 初始化变量
表达式2 -> 判断条件(判断条件的结果必须是boolean类型,true执行代码块,false-跳出整个循环语句)
表达式3 -> 更新变量
2.执行步骤:
(1)初始化变量;
(2)判断条件:
true - 执行代码块,再更新变量,重复第2个步骤;
false- 跳出整个循环语句。
需求1:从10输出到1。
for(int i=10; i>=1; i--){
System.out.println(i);
}
需求2:输出从1到10的奇数。
for(int i = 1;i<=10;i+=2){
System.out.println(i);
}
注意:初始化变量不一定从0开始,更新变量不一定每次都+1。
3.for变形记:
int i = 0;
for(;i<5;){
System.out.println(i);
i++; //在这里写++i与i++没有区别,因为分号表示执行语句的结束,不管先加还是后加都要加
}
System.out.println(i);
注意:在for循环中声明的变量只能在该循环中使用。
4.死循环:代码的流程一直运行在循环中,跳不出来,无法执行循环以外的代码。
for(;;){
System.out.println("死循环");
}
for(int i = 1;i>0;i++){
System.out.println("伪死循环");
}
注意:在项目中不要写死循环。
二、for循环的嵌套
含义:含义:一个for循环中有另一个for循环。
需求1:打印一个3行4列的长方形;
for(int i = 0;i<3;i++){ //控制行数
for(int j = 0;j<4;j++){ //控制列数
System.out.print("*");
}
System.out.println(); //换行
}
需求2:打印直角三角形;
for(int i = 0;i<5;i++){
for(int j = 0;j<=i;j++){
System.out.print("*");
}
System.out.println(); //换行
}
需求3:打印99乘法。
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();
}
三、while循环
1.语法结构:
while(表达式){
...代码块/循环体...
}
表达式的结果必须是boolean类型
true -> 循环
false -> 跳出循环
需求:我有个梦想,每月存3000,每年递增1000元,多少个月后存满20万。
int money = 3000;
int allMoney = 0;
int month = 0;
while(allMoney < 200000){
allMoney+=money;
month++;
if(month % 12 == 0){
money+=1000;
}
}
System.out.println(month + "个月后存满20万");
System.out.println(money);
2.while变形记:模拟for循环输出5遍"用良心做教育"。
int i = 0;
while(i<5){
System.out.println("用良心做教育");
i++;
}
3.死循环:
while(true){
System.out.println("死循环");
}
四、do-while循环
1.语法结构:
do{
...代码块/循环体...
}while(表达式);
一开始先执行一遍代码块,再去判断表达式;
表达式的结果必须是boolean类型
true -> 循环
false -> 跳出循环
需求:学校组织歌咏比赛,大赛在即,老师不放心小明同学的表演, 就叫他先彩排,直到老师满意为止。
Scanner scan = new Scanner(System.in);
String str;
do{
System.out.println("小明:\"旋转、跳跃,我闭着眼~~~~\"");
System.out.println("小明:\"老师,您满意了吗?\"");
str = scan.next();
}while(str.equals("不满意"));
2.死循环:
do{
System.out.println("死循环");
}while(true);
五、for vs while vs do-while
(1)表达式的区别:
a.for(初始化变量;判断条件;更新变量){}
b.while(判断条件){}
c.do{}while(判断条件)
共同点:判断条件都是boolean值,true-循环,false-跳出循环
(2)执行顺序的区别:
a.for:先判断再执行
b.while:先判断再执行
c. do-while:先执行一遍,再判断
(3)应用场景的区别:
a. 循环次数确定时,考虑使用for;
b.循环次数不确定时,先判断再执行,考虑使用while;
c. 循环次数不确定时,先执行一遍再判断,考虑使用do-while。
六、特殊的流程控制语句
1.break:作用在循环中,表示跳出整个循环语句;
//循环录入小明同学5门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示
Scanner scan = new Scanner(System.in);
double sum = 0;
boolean flag = true; //true-正常录入 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:作用在循环中,表示跳过剩余循环体;
//循环录入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:单独编写,表示结束当前方法;
4.lable:给循环做标记(给循环取名字).