Java for循环嵌套

本文详细介绍了如何使用Java编程实现九种常见的图形绘制需求,包括星形、阶梯型、倒阶梯型等,并结合for、while和do-while循环进行教学,展示了循环控制语句的灵活运用。同时涵盖了死循环、特殊流程控制(break、continue)和输出万年历的编程实践。
摘要由CSDN通过智能技术生成

一、需求

需求1:打印以下图形
                ****
                ****
                ****

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:打印以下图形
                *****   
                ****   
                ***        
                **       
                *       

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

 需求4:打印以下图形
                *****
                 ****
                  ***
                   **
                    *

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

 需求5:打印以下图形
                   *
                  ***
                 *****
                *******

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

 需求6:打印以下图形
                   *
                  * *
                 *   *
                *******

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

 需求7:打印以下图形
                *******
                 *****
                  ***
                   *

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

 需求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++){
        //第一行||最后一行||每行的第一列||每行的最后一列
	    if(i==0 || i==3 || j==0 || j==7-i*2-1){
			System.out.print("*");
		}else{
			System.out.print(" ");
	    }
	}
	    System.out.println();
}

 需求9:打印九九乘法表

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");  //如果用idea编辑需要多加一个"\t"
	}
	for(int j = i;j<=9;j++){
		System.out.print(i + "x" + j + "=" + (i*j) + "\t");
	}
		System.out.println();
}

二、While循环

2.1语法结构

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

2.2理解

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

2.3死循环

while(true){
                    System.out.println("用良心做教育");
                } 

while循环变形记:使用while循环去描述for循环(输出5遍"用良心做教育") 

//总结:while循环可以代替for循环,但是可读性较差
				int i = 0;
				while(i<5){
					System.out.println("用良心做教育");
					i++;
				}

 2.4案列

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

public class Test02{
	
	public static void main(String[] args){
				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万");
	
	}
}

 三、do...while...循环

3.1语法结构

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

3.2理解 

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

3.3执行顺序 

1.执行一遍代码块
                2.判断条件 - 表达式的结果必须是boolean
                    true -- 又执行代码块,重复第2个步骤
                    false - 跳出循环 

3.4死循环 

do{
                    System.out.println("用良心做教育");
                }while(true); 

3.5案列 

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

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

3.6 for vs while vs do-while

表达式的区别:
                for(初始化变量;判断条件;更新变量){}
                while(判断条件){}
                do{}while(判断条件);
                注意:判断条件的结果必须是boolean,true就循环,false就跳出循环

执行顺序的区别:
                for:先判断,再执行
                while:先判断,再执行
                do-while:先执行一遍再判断 

应用场景:
                循环次数固定时,使用for循环
                循环次数不固定时,并且先判断再执行,使用while循环
                循环次数不固定时,并且先执行一遍再判断,使用do-while循环 

四、特殊的流程控制语句 

1.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);
		
				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
                作用:作用于循环中,表示跳过剩余的循环体,进入到下一次循环

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 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
                作用:作用于方法中,表示结束当前方法

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

 4.lable
                含义:给循环做标记

//面试题:以下代码是否会报错?报错原因是什么?
				//答:这段代码根本就不会报错(考点lable)
					http://www.baidu.com
					for(int i = 1;i<=5;i++){
						System.out.println("用良心做教育");
					}

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

a:for(int i = 1;i<=5;i++){
						for(int j = 1;j<=3;j++){
							if(i == 3){
								break a;
							}
							System.out.println(i + " -- " + j);
						}
					}

 五、输出万年历

输入一个年份,再输入一个月份,把那个月的日历打印出来(1900年1月1日是星期一)

import java.util.Scanner;
public class Test05{
	
	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;
		
		//计算星期
		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();
			}
		}
		
	}
}

 

  • 8
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值