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();//换行
}
}
}
}