JavaEE - 循环、流程控制

一、for循环

循环概念:条件成立,就重复执行

1. 语法结构

for(表达式1;表达式2;表达式3){
	...代码块...
}

表达式1:初始化变量
表达式2:判断条件
表达式3:更新变量

执行流程:

  1. 初始化变量
  2. 判断条件:结果一定是boolean值
    • true - 执行代码块,并更新变量,重复第2个步骤
    • false- 跳出整个循环语句
for (int i = 1; i <= 5; i++) {
    System.out.println("循环输出5遍");
}

for循环变形:

int i = 1;
for (; i <= 5; ) {
    System.out.println("循环输出5遍");
    i++;
}
System.out.println(i);
//注意:在for循环内部声明的变量不能在for循环外面使用

死循环:

for (; ; ) {
    System.out.println("死循环");
}

需求1:打印0~10的数字

for (int i = 0; i <= 10; i++) {
    System.out.println(i);
}

需求2:打印1,3,5,7,9的数字

for (int i = 1; i <= 9; i += 2) {
    System.out.println(i);
}

需求3:打印10~1的数字

for (int i = 10; i > 0; i--) {
    System.out.println(i);
}

需求4:循环录入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次int类型的数字,输出最大值

Scanner scan = new Scanner(System.in);

System.out.println("请输入第1个数字:");
int max = scan.nextInt();

for(int i = 2; i<=5; i++) {
	System.out.println("请输入第" + i + "个数字:");
	int num = scan.nextInt();
	if(max < num) {
		max = num;
	}
}
System.out.println("最大值为:" + max);

2. 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:三角形
*****
 ****
  ***
   **
    *

for (int i = 0; i < 5; i++) {
    for (int k = 0; k < i; k++) {
        System.out.print(" ");
    }
    for (int j = 0; j < 5 - i; j++) {
        System.out.print("*");
    }
    System.out.println();
}

案例4:九九乘法表

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循环

语法结构:

while(表达式){
	...代码块...
}

表达式的结果一定是boolean
true - 循环
false- 跳出循环

死循环:

while (true) {
    System.out.println("xxx");
}

案例:每月存5000,每年递增1000元,多久后存满50万

int money = 5000;
int month = 0;//几个月
int allMoney = 0;
while (allMoney < 500000) {
	month++;
	allMoney += money;
	if (month % 12 == 0) {//每年递增1000元
		money += 1000;
	}
}
System.out.println(month/12+"年" +month%12 +"个月后存满50万 ");

三、do-while循环

语法结构:

do {
...代码块...
} while (表达式);

先执行一遍代码块
再判断表达式,表达式的值一定是boolean类型
true - 循环
false- 跳出循环

死循环:

do{
	System.out.println("xxx");
}while(true);

案例:可知白草参加学校组织的歌咏比赛,大赛在即,老师建议:先彩排一次,如果很令人满意,以后就不用彩排了,否则每天都排,直到现场表现满意为止!

Scanner scan = new Scanner(System.in);
String str;
do {
    System.out.println("可知白草:旋转跳跃,我闭着眼~~~");
    System.out.println("可知白草:老师,您满意吗??");
    str = scan.next();
} while (str.equals("不满意"));

四.for & while & do-while

表达式的区别:

for(初始化变量;判断条件;更新变量){}
while(判断条件){}
do{}while(判断条件);
**注意:**判断条件的结果都是boolean类型,true-循环,false-跳出循环

执行顺序的区别:

for:先判断再执行
while:先判断再执行
do-while:先执行一遍,再判断

应用场景:

循环次数确定时:for
循环次数不确定时,先判断:while
循环次数不确定时,先执行一遍: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

结束当前方法

public static void main(String[] args) {
    System.out.println("22");
    System.out.println("33");
    if (true) {
        return;//结束当前方法
    }
    System.out.println("这一句不会被运行");
}

return的主要作用有两点:

  1. 返回方法指定类型值
  2. 用于方法结束的标志,return 后面的语句不会被执行

4. label

给循环做标记

需求:嵌套for循环,外层循环5次,内层循环3次,当外层循环到第3次时,在内层循环中关闭外层循环

testLabel: //标签名可随意取
for (int i = 1; i <= 5; i++) {
    for (int j = 1; j <= 3; j++) {
        if (i == 3) {
            break testLabel;//关闭外侧循环
        }
        System.out.println(i + " -- " + j);
    }
}

经典面试题:以下代码会报错吗?不会

https://www.bilibili.com/
for (int i = 0; i < 5; i++) {
    System.out.println("//后的被当成了注释,https:被当成了Label标签");
}

万年历案例

输入一个年份,再输入一个月份,把那个月的日历打印出来

//1.输入年和月
Scanner scan = new Scanner(System.in);
System.out.println("请输入年:");
int year = scan.nextInt();// 2020
System.out.println("请输入月:");
int month = scan.nextInt();// 6
//2.计算1900~输入年的天数
int allDayOfYear = 0;
for (int i = 1900; i < year; i++) {
    if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {//闰年
        allDayOfYear += 366;
    } else {//平年
        allDayOfYear += 365;
    }
}
//3.计算1~输入月的天数
int allDayOfMonth = 0;
for (int i = 1; i < month; i++) {
    switch (i) {
        case 1:case 3:case 5:case 7:case 8:case 10:case 12:
            allDayOfMonth += 31;
            break;
        case 4:case 6:case 9:case 11:
            allDayOfMonth += 30;
            break;
        case 2:
            if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                allDayOfMonth += 29;
            } else {
                allDayOfMonth += 28;
            }
            break;
    }
}
//4.计算1900~输入年的天数 + 计算1~输入月的天数
int allDay = allDayOfYear + allDayOfMonth;
//5.计算星期
int week = allDay % 7 + 1;
//6.计算当月的天数
int day = 0;
switch (month) {
    case 1:case 3:case 5:case 7:case 8:case 10:case 12:
        day = 31;
        break;
    case 4:case 6:case 9:case 11:
        day = 30;
        break;
    case 2:
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
            day = 29;
        } else {
            day = 28;
        }
        break;
}
//7.打印日历
System.out.println("一\t二\t三\t四\t五\t六\t日");
int num = 0;//控制换行
//打印空格
for (int i = 1; i < week; i++) {
    System.out.print("\t");
    num++;
}
//打印日期
for (int i = 1; i <= day; i++) {
    System.out.print(i + "\t");
    num++;
    if (num % 7 == 0) {
        System.out.println();//换行
    }
}

演示:
万年历

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值