Java SE Day-04

循环语句的练习

键盘输入密码和确认密码,如果两次密码一致,则退出循环打印注册成功
两次密码不一致则继续输入密码和确认密码直到一致为止

	public static void main(String[] args){
		// 键盘输入密码和确认密码,如果两次密码一致,则退出循环打印注册成功
		// 两次密码不一致则继续输入密码和确认密码直到一致为止
		Scanner input = new Scanner(System.in);
		String passOne;
		String passTwo;
		do{
			System.out.println("请输入密码");
			passOne = input.next();
			System.out.println("请输入确认密码");
			passTwo = input.next();
			if(!passOne.equals(passTwo)){
				System.out.println("密码和确认密码不一致,请重新输入");
			}
		}while(!passOne.equals(passTwo));
		System.out.println("注册成功");
	}

这一题相对于来说比较简单 有个新的知识点就是在于一个字符串的效验上即变量1.equals(变量2)


5个一行输出1-100之间的偶数

public static void main(String[] args) {
        for (int i=2; i<=100; i+=2){
            if(i%10 != 0){
                System.out.print(i + ",");
            }else{
                System.out.println(i);
            }
        }
    }

或者

 public static void main(String[] args) {
        int count = 0;
        for (int i=2; i<=100; i+=2){
            count++;
            if(count<5){
                System.out.print(i + ",");
            }else{
                System.out.println(i);
                count = 0;
            }
        }
    }

这题主要是在于一个分析什么时候进行一个分隔


世界最高山峰是珠穆朗玛峰,它的高度是8848.86米,假如我有一张足够大的纸,它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度?

public static void main(String[] args) {
         //定义一个计数器,初始值为0
		int index=0;
		for (double i=0.1;i<=8848.86*1000;i*=2 ){
			index++;
		}
      //打印计数器的值
  	    System.out.println("需要折叠:" + index + "次");
}

这里有个小店就是在于一个0,因为我一开始是以1开始计算所以结果就多了1


实现输出如下数字三角形

1
12
123
1234
123451
22
333
4444
555551
   222
  33333
 4444444
555555555
public static void main(String[] args) {
		for (int i=1;i<=5 ;i++ ){
			for (int j=1;j<=i ;j++ ){
				System.out.print(j);
			}
			System.out.println();
		}
public static void main(String[] args) {
		for (int i=1;i<=5 ;i++ ){
			for (int j=1;j<=i ;j++ ){
				System.out.print(i);
			}
			System.out.println();
		}
public static void main(String[] args) {
	for (int i=1;i<=5 ;i++ ){
		for (int j=1;j<=5-i;j++ ){
			System.out.print(" ");
		}
		for (int j=1;j<=2*i-1 ;j++ ){
			System.out.print(i);
		}
		System.out.println();
		}
	}

这题相对来说是关于一个空格符号的输出然后排挤掉星号符达到一个所需的图形


计算这一天是这一年的第几天

案例需求:从键盘分别输入年、月、日,使用循环for+if实现,判断这一天是当年的第几天

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入年份");
		int year = input.nextInt();
		System.out.println("请输入月份");
		int month = input.nextInt();
		System.out.println("请输入几号");
		int data = input.nextInt();
		input.close();
		int days = 0;
		int sum = -31;
		for (int i = 1;i <= month ; i++){
			if(i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i ==10 || i == 12){
				days = 31;
				}else if (i ==2){
					if (year % 400 == 0 || year /4 == 0 && year % 100 != 0 ){
						days = 29;
					}else{
						days = 28;
						}
					}else {
						days = 30;
						}
			sum = days + sum;
			}
		sum += data;
		System.out.println(sum);
		}

这一题需要注意的是if的判断要在for循环里面,因为要进行一个月份的判断,下面还有一种,不管哪一种都需要在第一行导入一下代码import java.util.Scanner;

 public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.print("请输入年:");
        int year = input.nextInt();

        System.out.print("请输入月:");
        int month = input.nextInt();

        System.out.print("请输入日:");
        int day = input.nextInt();
        
        input.close();
        
        //计算这一天是这一年的第几天
        int days = day;
        for (int i = 1; i < month; i++) {
            if (i == 4 || i == 6 || i == 9 || i == 11) {
                days += 30;
            } else if (i == 2) {
                if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                    days += 29;
                } else {
                    days += 28;
                }
            } else {
                days += 31;
            }
        }
        System.out.println(year + "年" + month + "月" + day + "日是这一年的第" + days + "天");
    }

计算这一天是这一年的第几天

案例需求:从键盘分别输入年、月、日,判断这一天是当年的第几天。并增加输入值的合法性判断,确保输入的年份值必须大于0,月份值必须在[1,12]之间,日期值必须在[1, 当月最大日期值]范围内。

import java.util.Scanner;
···
public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入年份");
		int year = input.nextInt();
		while (year<0){
			System.out.println("您输入的年份有误,请重新输入");
			year = input.nextInt();
		}
		System.out.println("请输入月份");
		int month = input.nextInt();
		while (month <= 1 && month >= 12){
			System.out.println("您输入的月份有误,请重新输入");
			month = input.nextInt();
		}
		System.out.println("请输入几号");
		int data = input.nextInt();
		 int totalDaysOfMonth;
        if (month == 2) {
            if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                totalDaysOfMonth = 29;
            } else {
                totalDaysOfMonth = 28;
            }
        } else if (month == 4 || month == 6 || month == 9 || month == 11) {
            totalDaysOfMonth = 30;
        } else {
            totalDaysOfMonth = 31;
        }
		while(data<=1&&data>totalDaysOfMonth){
			System.out.println("您输入的日期有误,请重新输入");
			data = input.nextInt();
		}
		input.close();
		int days = 0;
		int sum = -31;
		for (int i = 1;i <= month ; i++){

		if(i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i ==10 || i == 12){
			days = 31;
		}else if (i ==2){
			if (year % 400 == 0 || year /4 == 0 && year % 100 != 0 ){
				days = 29;
			}else{
				days = 28;
			}
		}else {
			days = 30;
		}
			sum = days + sum;
		}
		sum += data;
		System.out.println(sum);
		}

这是我自己写的后期懒得在写个月份的判断就copy了下,下面为答案

import java.util.Scanner;
···
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        //如果要考虑输入非法值的情况,代码就比较复杂
        System.out.println("请输入日期:");
        int year;
        while(true){
            System.out.print("年:");
            year = input.nextInt();

            if(year > 0){
                break;
            }else{
                System.out.println("年份必须大于0");
            }
        }

        int month;
        while(true){
            System.out.print("月:");
            month = input.nextInt();

            if(month >=1 && month <= 12){
                break;
            }else{
                System.out.println("月份范围是[1,12]");
            }
        }

        //计算month月的总天数
        int totalDaysOfMonth;
        if (month == 2) {
            if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                totalDaysOfMonth = 29;
            } else {
                totalDaysOfMonth = 28;
            }
        } else if (month == 4 || month == 6 || month == 9 || month == 11) {
            totalDaysOfMonth = 30;
        } else {
            totalDaysOfMonth = 31;
        }

        int day;
        while(true){
            System.out.print("日");
            day = input.nextInt();

            if(day <= 0){
                System.out.println("日期必须大于0");
            }else if(day > totalDaysOfMonth){
                System.out.println(year +"年" + month +"月最多只有" + totalDaysOfMonth + "天");
            }else{
                break;
            }
        }

        input.close();

        //计算这一天是这一年的第几天
        int days = day;
        for (int i = 1; i < month; i++) {
            if (i == 4 || i == 6 || i == 9 || i == 11) {
                days += 30;
            } else if (i == 2) {
                if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                    days += 29;
                } else {
                    days += 28;
                }
            } else {
                days += 31;
            }
        }
        System.out.println(year + "年" + month + "月" + day + "日是这一年的第" + days + "天");
    }

这题是源于上题的基础进行了一个安全效验,需要明白在哪里添加安全验证


打印空心菱形

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7VizaLpt-1669907934902)(C:\Users\XK\Desktop\01.jpg)]

开发提示:

  • 平面图形涉及到有行有列,考虑到嵌套for循环
  • 一个外循环控制行,两个内循环控制输出内容
  • 一个内循环负责输出空格,另一个内循环输出"*"或空格
	public static void main(String[] args) {
		for (int i=1;i<=5;i++){
			for (int j = 1;j <= 5-i;j++ ){
				System.out.print(" ");
			}
			for (int j=1;j<=2*i-1;j++){
				if (j==1||j==2*i-1){
					System.out.print("*");
				}else{
					System.out.print(" ");
				}
			}
			System.out.println();
		}
		for (int i=4;i>=0; i--){
			for (int j=4;j>=i ;j-- ){
				System.out.print(" ");
			}
			for (int j=1;j<=2*i-1;j++ ){
				if (j==1||j==2*i-1){
					System.out.print("*");
				}else{
					System.out.print(" ");
				}
			}
			System.out.println();
		}
	}

我自己写的代码,一开始我想着是两个等腰三角形去完成,但是我想着出这道题说不定有个可以直接打印出来,结果想了挺久但是就是没想出来,于是我打算看下答案,没想到看了一眼我才发现就是等腰三角形。这告诉我,能解决就好,不要在意方法。以下为参考答案

 public static void main(String[] args){
        //上半部分:正的等腰三角形
        //5行
        for(int i=1; i<=5; i++){
            //(1)打印空格
			/*
			当i=1,打印4个空格,j=4,3,2,1	j>=i
			当i=2,打印3个空格,j=4,3,2
			当i=3,打印2个空格,j=4,3
			当i=4,打印1个空格,j=4
			当i=5,打印0个空格,j=4,让循环条件一次都不满足
			*/
            for(int j=4; j>=i; j--){
                System.out.print("  ");
            }
            //(2)打印*
			/*
			当i=1,打印1个,j=1					j<=2*i-1
			当i=2,打印3个,j=1,2,3,
			当i=3,打印5个,j=1,2,3,4,5
			当i=4,打印7个,j=1,2,3,4,5,6,7
			当i=5,打印9个,j=1,2,3,4,5,6,7,8,9
			*/
            for(int j=1; j<=2*i-1; j++){
                //不是全部打印*
                if(j==1 || j==2*i-1){
                    System.out.print("* ");
                }else{
                    System.out.print("  ");
                }
            }
            //(3)换行
            System.out.println();
        }


        //下半部分:倒立的等腰三角形
        //4行
        for(int i=1; i<=4; i++){
            //(1)打印空格
			/*
			当i=1,1个空格,j=1		j<=i
			当i=2,2个空格,j=1,2
			当i=3,3个空格,j=1,2,3
			当i=4,4个空格,j=1,2,3,4
			*/
            for(int j=1; j<=i; j++){
                System.out.print("  ");
            }
            //(2)打印*
			/*
			当i=1,7个*,j=1,2,3,4,5,6,7  j<=9-2*i;
			当i=2,5个*,j=1,2,3,4,5
			当i=3,3个*,j=1,2,3
			当i=4,1个*,j=1
			*/
            for(int j=1; j<=9-2*i; j++){
                //不是全部打印*
                if(j==1 || j==9-2*i){
                    System.out.print("* ");
                }else{
                    System.out.print("  ");
                }
            }
            //(3)换行
            System.out.println();
        }
    }

总结:

循环条件依赖循环操作使用do…while
循环次数已知使用for(先判断后执行)
循环次数未知使用while与do…while
while(先判断后执行);
do…while(先执行后判断);

分析需要几个循环才好更好的进行一个循环的嵌套

每日金句:

​ 《冬夜读书示子聿》—— (宋) 陆游

​ 古人学问无遗力,少壮工夫老始成。

​ 纸上得来终觉浅,绝知此事要躬行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值