【无标题】

Day05

for的循环嵌套

需求1:打印以下图形

**** i=0 (j=0,1,2,3)
**** i=1 (j=0,1,2,3)
**** i=2 (j=0,1,2,3)
for(int i = 0;i<3;i++){//此处是先设置值,从0开始,有三排,则i<3,每次计数i就加1直到等于3,不满足小于3的条件
	for(int j = 0;j<4;j++){//这里设置for循环嵌套是因为有四列,从0开始,则每次计数加1直到j等于4,不满足小于4的条件
		System.out.print("*");
	}
System.out.println();
}

需求2:打印以下图形

*		i=0 (j=0)
**		i=1 (j=0,1)
***		i=2 (j=0,1,2)
****	i=3 (j=0,1,2,3)
*****	i=4 (j=0,1,2,3,4)
for(int i = 0;i<5;i++){//从0开始有5排,则i小于5.
	for(int j = 0;j<=i;j++){//这里的直角三角j的值从0开始,i也是从0开始。每次j的值与i小于则加*,直到j大于i。就结束。
		System.out.print("*");这里的print没有ln,只有当j与i的值相等时程序才会不加*,而进行下一项的运行
	}
	System.out.println();
}

需求3:打印以下图形

    *
   **
  ***
 ****
*****
for(int i = 0;i<5;i++){这里也是从0开始,有5排,i<5
	for(int k = 0;k<4-i;k++){这里设置是因为i为0时,k也是0.每运行一次k自增1,i一直是0,只有加*,直到k的值等于4-i,则结束空格
		System.out.print(" ");
	}
	for(int j = 0;j<=i;j++){
		System.out.print("*");
	}
	System.out.println();
}

需求4:打印以下图形

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

需求5:打印以下图形

*****
 ****
  ***
   **
	*
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();
}

需求6:打印以下图形

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

需求7:打印以下图形

   *
  * *
 *   *
*******
for(int i = 0;i<4;i++){
	for(int k = 0;k<3-i;k++){
		System.out.print(" ");
	}
	for(int j = 0;j<i*2+1;j++){
		if(i==0 || i==3 || j==0 || j== i*2){//第一行、最后一行、每行第一列、每行最后一列
			System.out.print("*");
		}else{
			System.out.print(" ");
		}
	}
	System.out.println();
}

需求8:打印以下图形

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

需求9:打印以下图形

*******
 *   *
  * *
   *
for(int i = 0;i<4;i++){
	for(int k = 0;k<i;k++){
		System.out.print(" ");
	}
	for(int j = 0;j<7-i*2;j++){
		if(i==0 || i==3 || j==0 || j== 7-i*2-1){//第一行、最后一行、每行第一列、每行最后一列
			System.out.print("*");
		}else{
			System.out.print(" ");
		}
	}
	System.out.println();
}   

需求10:九九乘法表

解决方案一:
	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循环

语法结构:
	while(表达式){
		...代码块...
	}

理解:表达式的结果必须是boolean类型
true – 执行代码块
false - 跳出整个循环

需求:使用while循环打印5遍"用良心做教育"

int i = 0;
while(i<5){
	System.out.println("用良心做教育");
	i++;
}
死循环:
	while(true){
		System.out.println("死循环");
	}

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

int allMoney = 0;
int money = 3000;
int month = 0;
			
while(allMoney < 200000){
	allMoney += money;
	month++;
	if(month % 12 == 0){
		money+=1000;
	}
}
			
System.out.println(month + "个月后存满20万");
System.out.println(money);

小结:while循环可以做到for循环的功能

do-while循环

语法结构:
	do{
		...代码块...
	}while(表达式);

理解:
先执行一遍代码块,再判断表达式
表达式的结果必须是boolean类型
true – 执行代码块
false - 跳出整个循环

做实验:
	do{
		System.out.println("用良心做教育");
	}while(false);

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

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

小结:
1.do-while先循环一遍,再判断
2.在代码块中声明的变量不能在外面使用

知识点:for vs while vs do-while
表达式的区别:
for(初始化变量;判断条件;更新变量){}
while(判断条件){}
do{}while(判断条件);
注意:三大循环的判断条件,如果是true就执行代码块,如果是false就跳出循环

执行顺序的区别:
for:先判断,在执行

​ while:先判断,再执行

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

应用场景的区别:
for:循环次数确定时
while:循环次数不确定时,先判断,再执行
do-while:循环次数不确定时,先执行一遍,再判断

特殊的流程控制语句 – break

含义:作用于循环中,表示跳出/结束当前循环

做实验:
	while(true){
		System.out.println("111");
		System.out.println("222");
		if(true){
			break;
		}
		System.out.println("333");
	}

案例:循环录入麻生希同学5门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示。

Scanner scan = new Scanner(System.in);
		
boolean flag = true;//true-正常录入   false-非正常录入//此处是解释了录入的分数是正常,还是非正常的(也就是负的分数)
		
double sum = 0;
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("分数为负数,停止录入");
}

特殊的流程控制语句 – continue

含义:作用于循环中,表示跳过循环体剩余部分,进入到下一次循环中

做实验:
	while(true){
		System.out.println("111");
		System.out.println("222");
		if(true){
			continue;
		}
		System.out.println("333");
	}

案例:循环录入Java课5名学生的成绩,统计分数大于等于80分的学生比例。

解决方案一:
	Scanner scan = new Scanner(System.in);
	
	int count = 0;//分数大于等于80分的学生个数
			
	for(int i = 1;i<=5;i++){
		System.out.println("请输入第" + i + "名学生的成绩:");
		double score = scan.nextDouble();
				
		if(score >= 80){
			count++;
		}
	}
			
	double proportion = count/5.0*100;//这里是double类型,则要把int类型的数值改成同样的数据类型,不然结果就会出现0.0%
	System.out.println("成绩大于等于80分学生的比例为:" + proportion + "%");
解决方案二:
	Scanner scan = new Scanner(System.in);
	
	int count = 0;//分数大于等于80分的学生个数
			
	for(int i = 1;i<=5;i++){
		System.out.println("请输入第" + i + "名学生的成绩:");
		double score = scan.nextDouble();
		if(score<80){
			continue;这里就使用了continue跳过了循环体的剩余部分,进入到下一次的循环中
		}
		count++;
	}
			
	double proportion = count/5.0*100;
	System.out.println("成绩大于等于80分学生的比例为:" + proportion + "%");

特殊的流程控制语句 – return

含义:作用于方法中,表示结束当前方法

System.out.println("111");
System.out.println("222");
if(true){
	return;
}
System.out.println("333");

特殊的流程控制语句 – label

面试题:以下代码是否会报错?
答案:不会

https://www.baidu.com/
for(int i = 1;i<=5;i++){
	System.out.println("用良心做教育");
}

理解:给循环做标记

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

a:for(int i = 1;i<=5;i++){
	for(int j = 1;j<=3;j++){
		System.out.println(i + " -- " + j);
		if(i == 2){
			break a;//跳出指定循环 这里的a指出了标记的程序位置,而break则是跳出/结束当前的循环
		}
	}
}

万年历

需求:输入年和月,打印当月的日历
线索:1900年1月1日是星期一

要想打印当月的日历,需要哪些数据作为支持?
年份、月份、当月天数、当月第一天是星期几

Scanner scan = new Scanner(System.in);
System.out.println("请输入年:");
int year = scan.nextInt();
System.out.println("请输入月:");
int month = scan.nextInt();

//当月天数
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;
}

//计算总天数 -- 1900.1.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;
	}
}

//计算月的总天数 -- 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;

//计算星期
int week = allDay%7;//0~6
if(week == 0){
	week = 7;
}

//打印日历
System.out.println(" --- " + year + "年" + month + "月 ---");
System.out.println("一\t二\t三\t四\t五\t六\t日");
		
int count = 0;
		
for(int i = 1;i<week;i++){
	System.out.print("\t");
	count++;
}
		
for(int i = 1;i<=day;i++){
	System.out.print(i + "\t");
	count++;
	if(count % 7 == 0){
		System.out.println();
	}
}
  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值