【Java】经典案例练习-DAY10

1.三天打鱼,两天晒网

·有个人从2000年1月1日开始,三天打鱼,两天晒网,那么输入一个日期之后,根据年月日来判断这个人当天是在打渔还是在晒网

·思路:因为三天打鱼两天晒网,可以看作用5天作为一个组合。那么,就通过计算从2000年1月1日开始,到当前输入日期为止经历的总天数。再利用总天数除以5,通过余数来判断那天这个人在干嘛。

(1)通过输入的年份,来跟2000年计算,一共过了多少个整年(计算过程中要小心闰年)

(2)通过输入的月份,来计算当前输入年份里已经过了几个月(计算过程中也要小心闰年,即二月份的天数)

(3)通过输入的日期,加上之前算出来的经过年数、月数,一起算出到输入年月日为止一共度过了多少天数

·代码部分:

import java.util.Scanner;

public class Test{
  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 day = input.nextInt();

    //记录总天数
    int days = 0;
    //计算当前输入日期和开始日期2000年1月1日之间的总天数
    //计算经过了多少个整年
    int yearCount = year-2000;
    days+=yearCount*365;

    //判断经过的这些整年中又有多少个闰年
    for(int i =2000;i<year;i++){
        //判断是否是闰年
        if((i%4==0&&i%100!=0)||i%400==0){
            //闰年的时候,天数要加一天(闰年一年366天)
            days+=1;
        }
    }

    //计算输入的月份在当年经过的天数
    for(int i =1;i<month;i++){
        switch(i){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
                days+=31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                days+=30;
                break;
            case 2:
              //判断输入的年份是否是闰年,来判断当年2月份是28天还是29天
                if((year%4==0&&year%100!=0)||year%400==0){
                    //闰年的天数要增加一天
                    days+=29;
                }else{
                    days+=28;
                }
        }
    }

    //再加上当月的天数
    days+=day;
    
    System.out.println("获得总天数:"+days+“天”)

    //三天打鱼,两天晒网 周期是5天,所以用总天数除以5,求余数,通过余数就可以知道当前日期是5天里的哪一天了
    int re = days%5;
    if(re==4||re==0){
        System.out.println(year+"年"+month+"月"+day+"日这天,这个人在晒网");
    }else{
        System.out.println(year+"年"+month+"月"+day+"日这天,这个人在打鱼");
    }
    
  }
}

2.利用双重/多重循环打印图形

·双重循环:一个循环体内又包含了另外一个循环

·多重循环:双重循环里又包含了一个循环

·各循环可互相嵌套,不过一般不超过3层;外层循环变量变化一次,内层循环就整个跑一遍

(1)打印矩形

·要点:外层循环控制行数,内层循环控制列数

public class Test{
  public static void main(String[] args){
      for(i=0;i<5;i++){
          for(j=0;j<5;j++){
              System.out.print("* ");
          }
          System.out.println();
      }
  }
}

·打印结果

 

(2)打印直角三角形

public class Test{
  public static void main(String[] args){
     for(int i =0;i<5;i++){
            for(int j=0;j<=i;j++){
                System.out.print("* ");
            }
            System.out.println();
        }
  }
}

·打印结果

(3) 打印平行四边形

·要点:可以先在左边打印一个空白的直角三角形,然后紧跟着打印一个矩形,把矩形挤成平行四边形

public class Test{
  public static void main(String[] args){
     for(int i =0;i<5;i++){
            //打印一个空的直角三角形
            for(int k=0;k<i+1;k++){
                System.out.print("  ");
            }
            //再打印一个矩形
            for(int j =0;j<5;j++){
                System.out.print("* ");
            }
            System.out.println();
        }
  }
}

·打印结果

 

(4)打印倒三角形

public class Test{
  public static void main(String[] args){
    for(int i =0;i<5;i++){
            for(int j=0;j<5-i;j++){
                System.out.print("* ");
            }
            System.out.println();
        }
  }
}

·打印结果

(5) 打印平行四边形2

·思路:先在左边打印一个空的倒三角形,然后在右边打印一个矩形,就可以挤出向另外一边的平行四边形

public class Test{
  public static void main(String[] args){
     for(int i=0;i<5;i++){
            //打印倒三角
            for(int j=0;j<5-i;j++){
                System.out.print("  ");
            }
            //打印矩形
            for(int k = 0;k<5;k++){
                System.out.print("* ");
            }
            System.out.println();
        }
  }
}

·打印结果

(6)打印等腰三角形

·要点:先在左边打印一个空的倒三角,然后跟着再打印一个直角三角形

public class Test{
  public static void main(String[] args){
     for(int i =0;i<5;i++){
            //打印空的倒三角
            for(int j =0;j<4-i;j++){
                System.out.print("  ");
            }
            //打印一个直角三角形
            for(int k =0;k<i*2+1;k++){
                System.out.print("* ");
            }
            System.out.println();
        }
  }
}

 ·打印结果

(7) 打印菱形

·要点:先打印等腰三角形作为上半部分,然后再打印一个倒的等腰三角形作为下半部分

public class Test{
  public static void main(String[] args){
     //打印上半部分
        for(int i =0;i<5;i++){
            for(int j=0;j<5-i;j++){
                System.out.print("  ");
            }
            for(int k=0;k<i*2+1;k++){
                System.out.print("* ");
            }
            System.out.println();
        }
        //打印下半部分
        for(int i=3;i>=0;i--){
            for(int j=0;j<5-i;j++){
                System.out.print("  ");
            }
            for(int k=0;k<i*2+1;k++){
                System.out.print("* ");
            }
            System.out.println();
        }
  }
}

·打印结果

(8)打印空心菱形

·要点:在打印菱形的基础上,打印星号的时候,判断每行中开头的和结尾的星号保留,其余的打印空格 

public class Test{
  public static void main(String[] args){
     //打印上半部分
        for(int i =0;i<5;i++){
            for(int j=0;j<5-i;j++){
                System.out.print("  ");
            }
            for(int k=0;k<i*2+1;k++){
                if(k==0||k==i*2) {
                    System.out.print("* ");
                }else{
                    System.out.print("  ");
                }
            }
            System.out.println();
        }
        //打印下半部分
        for(int i=3;i>=0;i--){
            for(int j=0;j<5-i;j++){
                System.out.print("  ");
            }
            for(int k=0;k<i*2+1;k++){
                if(k==0||k==i*2) {
                    System.out.print("* ");
                }else{
                    System.out.print("  ");
                }
            }
            System.out.println();
        }
  }
}

·打印结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值