java——Java中的循环

Java中的循环

理解:条件成立,就重复的执行某个功能

优点:解决代码的冗余

分类:

  1. for循环
  2. while循环
  3. do-while循环

1.for循环

语法结构:

for(表达式1;表达式2;表达式3){
					...代码块/循环体...
				}

理解:

​ 表达式1——初始化变量

​ 表达式2——判断条件(结果必须为Boolean)

​ 表达式3——更新变量

执行步骤:

  1. 初始化变量
  2. 判断条件(结果必须为Boolean)
    1. true——执行代码块,再更新变量,最后重复第二个步骤
    2. false——跳出整个循环语句

eg:输出1~100的数字

for(int i = 1;i<=100;i++){
					System.out.println(i);
				}

eg:输出1~100的奇数

for(int i = 1;i<=100;i+=2){
					System.out.println(i);
				}

死循环:

for(;;){
					System.out.println("死循环");
				}

伪死循环:

for(int i = 0;i>=0;i++){
					System.out.println("伪死循环");
				}

eg:循环录入5个数字,输出总和

import java.util.Scanner;
public class Test{
    public static viod main(String[] args){
    Scanner scan = new Scanner(System.in);
		
				int sum = 0;//累计总和
				for(int i = 1;i<=5;i++){
					System.out.println("请输入第" + i + "个数字:");
					int num = scan.nextInt();
					
					sum += num;
				}
				
				System.out.println("总和为:" + sum);
}
}


2.嵌套for循环

打印三角星

public class Test{
    public static viod main(String[] args){
        /**
        需求1:打印以下图形
			****
			****
			****
        */
   		for(int i = 0;i<3;i++){//外层循环控制行数
				//System.out.println("****");
				
				for(int j = 0;j<4;j++){//内层循环控制列数
					System.out.print("*");
				}
				System.out.println();//换行
			}
}
}


public class Test{
    public static viod main(String[] args){
        /**
        需求2:打印以下图形
			*		i=0
			**		i=1
			***		i=2
			****	i=3
			*****	i=4
        */
		for(int i = 0;i<5;i++){
			
			for(int j = 0;j<=i;j++){
				System.out.print("*");
			}
			System.out.println();
		}
}
}
public class Test{
    public static viod main(String[] args){
        /**
        需求3:打印以下图形
			*****
			****
			***
			**
			*
			
        */
		for(int i = 0;i<5;i++){
				for(int j = 0;j<5-i;j++){
					System.out.print("*");
				}
				System.out.println();
			}
}
}
public class Test{
    public static viod main(String[] args){
        /**
        需求4:打印以下图形
			   *
			  ***
			 *****
			*******
        */
        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();
			}
		
}
}		
public class Test{
    public static viod main(String[] args){
        /**
        需求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++){
					//第一行 || 最后一行 || 第一列 || 最后一列
					if(i == 0 || i == 3 || j == 0 || j == i*2){
						System.out.print("*");
					}else{
						System.out.print(" ");
					}
				}
				System.out.println();
			}
		
}
}		

九九乘法表

public class Test{
    public static viod main(String[] args){
        /**
        1x1=1	
		1x2=2	2x2=4	
		1x3=3	2x3=6	3x3=9	
		1x4=4	2x4=8	3x4=12	4x4=16	
		1x5=5	2x5=10	3x5=15	4x5=20	5x5=25	
		1x6=6	2x6=12	3x6=18	4x6=24	5x6=30	6x6=36	
		1x7=7	2x7=14	3x7=21	4x7=28	5x7=35	6x7=42	7x7=49	
		1x8=8	2x8=16	3x8=24	4x8=32	5x8=40	6x8=48	7x8=56	8x8=64	
		1x9=9	2x9=18	3x9=27	4x9=36	5x9=45	6x9=54	7x9=63	8x9=72	9x9=81	

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

3.while循环

语法结构:

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

理解:
表达式的结果必须是boolean

​ true – 执行代码块

​ false - 跳出循环

eg: 张三每月存3000,每年递增1000元,多少个月后存满20万

public class Test{
    public static viod main(String[] args){
      	int money = 3000;
		int allMoney = 0;
		int month = 0;
			
		while(allMoney < 200000){
			month++;
			allMoney += money;
			if(month%12 == 0){
				money += 1000;
			}
		}
			
		System.out.println(month + "个月后存满20万");
		System.out.println(money);
		
}
}		

4.do-while循环

语法结构:

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

理解:
首先,先运行一遍代码块,在判断表达式
表达式的结果必须是boolean
true – 执行代码块
false – 跳出循环

eg:张三参加学校组织的歌咏比赛,大赛在即,老师建议:先彩排一次,如果很令人满意,以后就不用了,

​ 否则每天都排,直到现场表现满意为止!

import java.util.Scanner;
public class Test{
    public static viod main(String[] args){
      	Scanner scan = new Scanner(System.in);
		
			String str;
			do{
				System.out.println("张三:旋转、跳跃...");
				System.out.println("张三:老师,您满意了吗?");
				str = scan.next();
				
			}while(str.equals("不满意"));
		
}
}		

5.万年历

import java.util.Scanner;
public class Test05{
	/**
		知识点:万年历
		
		需求:输入年和月,打印当月的日历
		
		问题:不知道输入年的输入月的第一天是星期几?
		线索:1900年1月1日 -- 星期一
		思路:
			获取1900年1月1日 到输入年输入月的总天数
			总天数%7 获得输入年输入月的第一天是星期几
			
			
		问题:怎么计算出总天数
		思路:
			把年和月拆分出来
			先算1900~输入年的总天数 
			再算1月~输入月的总天数
		
	*/
	public static void main(String[] args){
		
		Scanner scan = new Scanner(System.in);
		
		System.out.println("请输入年份:");//2023
		int year = scan.nextInt();
		System.out.println("请输入月份:");//2
		int month = scan.nextInt();
		
		//获取年的总天数
		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;
			}
		}
		
		//获取月的总天数
		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;
			}
		}
		
		//获取总天数 -- 获取到1900.1.1~输入年输入月的第1天的总天数
		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 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();
			}
		}
		
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值