一、for循环嵌套
1.需求:打印图形
*
**
***
****
*****
for(int i = 0;i<5;i++){
for(int j = 0;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
*****
****
***
**
*
for(int i = 0;i<5;i++){
for(int j = 5;j>i;j--){
System.out.print("*");
}
System.out.println();
}
*****
****
***
**
*
for(int i = 0;i<5;i++){
for(int k = 0;k<i;k++){
System.out.print(" ");
}
for(int j = 5;j>i;j--){
System.out.print("*");
}
System.out.println();
}
*
***
*****
for(int i = 0;i<3;i++){
for(int k = 2;k>i;k--){
System.out.print(" ");
}
for(int j = 0;j<i*2+1;j++){
System.out.print("*");
}
System.out.println();
}
*
* *
*****
for(int i = 0;i<3;i++){
for(int k = 2;k>i;k--){
System.out.print(" ");
}
for(int j = 0;j<i*2+1;j++){
if(i==0 || i==2 || j==0 || j==i*2){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
*****
***
*
for(int i = 0;i<3;i++){
for(int k = 0;k<i;k++){
System.out.print(" ");
}
for(int j = 5;j>=i*2+1;j--){
System.out.print("*");
}
System.out.println();
}
*****
* *
*
for(int i = 0;i<3;i++){
for(int k = 0;k<i;k++){
System.out.print(" ");
}
for(int j = 5;j>=i*2+1;j--){
if(i==0 || i==2 || j==5 || j==i*2+1){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
2.需求:九九乘法表
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循环
1.语法结构
while(表达式){
...代码块...
}
2.理解
表达式的结果必须是boolean true - 执行代码块 false- 跳出循环
3.死循环
while(true){ System.out.println("死循环"); }
4.做实验
while(false){
System.out.println("用良心做教育");
}
while循环变形记:while循环可以表示for循环
int i = 0;
while(i < 5){
System.out.println("用良心做教育");
i++;
}
5.案例
我有个梦想,每月存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万 " + money);
6.总结
循环次数不确定
三、do-while循环
1.语法结构
do{
...代码块...
}while(表达式);
2.理解
表达式的结果必须是boolean
true - 执行代码块
false- 跳出循环
3.执行顺序
1.先执行一遍代码块 2.判断表达式 2.1 true - 执行代码块,再重复第2个步骤 2.2 false- 跳出循环
4.死循环
do{
System.out.println("死循环");
}while(true);
5.案例
许川参加学校组织的歌咏比赛,
大赛在即,老师建议:先彩排一次,如果很令人满意,
以后就不用彩排了,否则每天都排,直到现场表现满意为止!
Scanner scan = new Scanner(System.in);
String str;
do{
System.out.println("许川:旋转、跳跃,我闭着眼~~~");
System.out.println("许川:何老师,您满意了吗?");
str = scan.next();
}while(str.equals("不满意"));
6.总结
循环次数不确定
7.for vs while vs do-while
语法结构的区别:
for(初始化变量;判断条件;更新变量){}
while(判断条件){}
do{}while(判断条件);
循环共同点:判断条件的结果都是boolean值,true-循环 false-跳出循环
执行顺序的区别:
for:先判断,再执行
while:先判断,再执行
do-while:先执行一遍,再判断
应用场景的区别:
循环次数确定:for
循环次数不确定,先判断,再执行:while
循环次数不确定,先执行一遍,再判断:do-while
四、特殊流程控制语句
1.break
2.作用
作用于循环中,表示跳出当前循环
3.做实验
while(true){
System.out.println("111");
System.out.println("222");
if(true){
break;
}
System.out.println("333");
System.out.println("444");
}
4.案例
循环录入麻生希同学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("分数为负数,停止录入");
}
5.continue
5.1作用
作用于循环中,表示跳过当前循环剩余的部分,进入到下一次循环
5.2做实验
while(true){
System.out.println("111");
System.out.println("222");
if(true){
continue;
}
System.out.println("333");
System.out.println("444");
}
5.3案例
循环录入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) + "%");
6.return
6.1作用
作用于方法中,表示结束该方法
6.2做实验
System.out.println("111");
System.out.println("222");
if(true){
return;
}
System.out.println("333");
System.out.println("444");
7.lable
7.1 lable的面试题
描述下列代码第几行报错?不会报错
http://www.baidu.com
for(int i = 0;i<5;i++){
System.out.println("用良心做教育");
}
7.2 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;
}
}
}
五、万年历
1.需求
万年历:输入一个年份,再输入一个月份,
把那个月的日历打印出来
(1900年1月1日是星期一)。
Scanner scan = new Scanner(System.in);
System.out.println("请输入年:"); //2021
int year = scan.nextInt();
System.out.println("请输入月:"); //7
int month = scan.nextInt();
//1.计算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;
}
}
//2.计算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;
}
}
//3.年的总天数 + 月的总天数
int allDay = allDayOfYear + allDayOfMonth+1;
//4.获取星期
int week = allDay%7;
System.out.println(week);
//5.获取当月天数
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;
}
//6.打印日历
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();
}