Java三大流程控制语句之While和do—while循环语句

一、while循环语句

1.语法结构:

while(表达式){
				...代码块/循环体...
			}

2.理解:

表达式的结果必须是boolean
		true - 执行代码块
		false- 跳出循环

3.死循环:

public class 文件名{
    public static void main(String[] args){
			while(true){
				System.out.println("死循环");
			}
    }
}

4.变形记:使用while循环去代替for循环

public class 文件名{
    public static void main(String[] args){
			int i = 0;
			while(i<5){
				System.out.println("用真心待人");	
                i++;
			}
    }
}
//小结:while循环的表达式就是for循环中的判断条件

5. 案例:我有个梦想,每月存3000,每年递增1000元,多少个月后存满20万

public class 文件名{
    public static void main(String[] args){
			double allMoney = 0;
			double money = 3000;
			int month = 0;
			while(allMoney < 200000){
				month++;
				allMoney += money;
				if(month % 12 == 0){
					money += 1000;
				}
			}		
			System.out.println(month + "个月后存满20万");
			System.out.println(money);		
    }
}
//小结:循环次数不确定时,使用while循环

二、do-while循环

1.语法结构:

do{
			...代码块/循环体...
		}while(表达式);

2.理解:

先运行一遍代码块,再判断表达式
		表达式的结果必须是boolean
			true - 执行代码块
			false- 跳出循环

3.死循环:

public class 文件名{
    public static void main(String[] args){
			do{
				System.out.println("死循环");
			}while(true);
			
    }
}

4.案例:

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

import java.util.Scanner;
public class 文件名{
    public static void main(String[] args){
			Scanner scan = new Scanner(System.in);
			String str;
			do{
				System.out.println("小明:\"旋转、跳跃,我闭着眼...\"");
				System.out.println("小明:\"老师,您满意了吗?\"");
				str = scan.next();
				
			}while(str.equals("不满意"));
    }
}
//小结:do-while循环的特点就是先执行一遍,再判断

三、for vs while vs do-while

1.表达式的区别:

for(初始化变量;判断条件;更新变量){}
		while(判断条件){}
		do{}while(判断条件);

2.执行顺序的区别:

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

3.应用场景的区别:

循环次数确定:for
		循环次数不确定,并且先判断再执行:while
		循环次数不确定,并且先执行一遍再判断:do-while

四、万年历

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

(1900年1月1日是星期一)。

import java.util.Scanner;
public class 文件名{
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);	
		System.out.println("请输入年份:");
		int year = scan.nextInt();
		System.out.println("请输入月份:");
		int month = scan.nextInt();
		
		//计算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;
			}
		}	
		//计算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;
			}
		}
		
		//计算出总天数
		int allDay = allDayOfYear + allDayOfMonth + 1;//+1表示当月的1号
		
		//计算星期
		int week = allDay%7;
		if(week == 0){
			week = 7;
		}
		
		//计算当月的天数
		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;
		}
		
		//打印日历
		
		System.out.println("---" + year + "年" + month + "月---");
		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();//换行
			}
		}
	}
}