周末学习总结

刚刚开始学习java,也不知道写什么,就记录自己的学习情况算了。

这次打算按自己的想法,在不看资料的情况下写一个动态日历,看看自己前面的学习情况

因为基础不是很好,所以就用最基础的来写,这样应该和我一样的新手应该也可以看懂

public static void main(String[] args) {
//  因为1990年一月一日刚好是星期一,方便计算,所以一般都用1990
  System.out.println("请输入您要查询的年,月,日(用空格隔开)(最远支持到1900年):");
  Scanner sc=new Scanner(System.in);
  int year=sc.nextInt();
  int month=sc.nextInt();
  int day=sc.nextInt();
  int day1=0;//day1是要计算从1990年到用户输入的那年有多少天
  int day2=0;//day2是要计算从那年一月到用户输入的那月有多少天
  for(int i=1990;i<year;i++){
   if(i%400==0||(i%4==0&&i%100!=0)){
    day1+=366;
   }else{
    day1+=365;
   }  
   
  }
   
  for(int j=1;j<month;j++){
      int num=0;//num为每个月的天数
      switch(j){
      case 1:
      case 3:
      case 5:
      case 7:
      case 8:
      case 10:
      case 12:
      num=31;
      break;
      case 2:
        if(year%400==0||(year%4==0&&year%100!=0)){
          num=29;
         }else{
          num=28;
         }
         break;
       default:
          num=30;
      }
      day2+=num;

 //用if也可以实现一样的效果

//  for(int j=1;j<month;j++){
//     int num=0;
//   if(j==1||j==3||j==5||j==7||j==8||j==10||j==12){ 
//    day2+=31;
//   }else if(j==2){
//    if(year%400==0||(year%4==0&&year%100!=0)){
//     day2+=29;
//    }else{
//     day2+=28;
//    }
//   }else{
//    day2+=30;
//   }
  }
  int day3=day1+day2;//从1990年到我们要输出的日历哪月的总天数
  int kong=day3%7;//对其取余就可以得到这个月一号之前空余了多少天
  System.out.println("\t\t"+year+"年"+month+"月");
  System.out.println("一\t二\t三\t四\t五\t六\t七");
  int num=0;//每当num等于七我们就该换行了
  for(int a=1;a<=kong;a++){
   System.out.print("\t");
   num++;
  }
  int x=0;//计算本月份有多少天
  if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){ 
   x=31;
  }else if(month==2){
   if(year%400==0||(year%4==0&&year%100!=0)){
    x=29;
   }else{
    x=28;
   }
  }else{
   x=30;
  }
  for(int b=1;b<=x;b++){
   if(b==day){//将用户输入的那一天用特殊的*号标出来
    if(num==5||num==6){//将周末用【】标记出来
    System.out.print("【*"+b+"】\t");
    num++;
    }else{
     System.out.print("*"+b+"\t");
     num++;
    }
   }else{
    if(num==5||num==6){//将周末用【】标记出来
   System.out.print("【"+b+"】\t");
      num++;
    }else{
     System.out.print(b+"\t");
        num++;
    }
   }
      if(num==7){
       System.out.println();
       num=0;//开始新一轮的循环
      }
  }
 }

 

原本把那些方法封装起来的,但是操作的时候遇到了困难就放弃了,等以后熟练了再把它简化吧

现在来看下成果

 

 

现在面向对象掌握的比较熟练了,把以上代码封装起来,要用的时候直接调用就行了

 

 这样看起来就简洁多了,下面是封装好的方法:

import java.util.Scanner;

public class calendar {
    Scanner sc=new Scanner(System.in);
    private int year;
    private int month;
    private int day;
    private int day1;//day1是要计算从1990年到用户输入的那年有多少天
    private int day2;//day2是要计算从那年一月到用户输入的那月有多少天
    private int x;//计算当前月份有多少天
    public calendar() {
        
    }
    public void query() {
    System.out.println("请输入您要查询的年,月,日(用空格隔开)(最远支持到1900年):");
    int year=sc.nextInt();
    int month=sc.nextInt();
    int day=sc.nextInt();
    this.year=year;
    this.month=month;
    this.day=day;
    Day1();
    Day2();
    x();
    print();
    }
    public void Day1() {
         int day1=0;
         for(int i=1990;i<year;i++){
           if(i%400==0||(i%4==0&&i%100!=0)){
            day1+=366;
           }else{
            day1+=365;
           }  
           
          }
         this.day1=day1;
    }
    public void Day2() {
        int day2=0;
        for(int j=1;j<month;j++){
              int num=0;//num为每个月的天数
              switch(j){
              case 1:
              case 3:
              case 5:
              case 7:
              case 8:
              case 10:
              case 12:
              num=31;
              break;
              case 2:
                if(year%400==0||(year%4==0&&year%100!=0)){
                  num=29;
                 }else{
                  num=28;
                 }
                 break;
               default:
                  num=30;
              }
              day2+=num;

         //用if也可以实现一样的效果

        //  for(int j=1;j<month;j++){
//             int num=0;
        //   if(j==1||j==3||j==5||j==7||j==8||j==10||j==12){ 
//            day2+=31;
        //   }else if(j==2){
//            if(year%400==0||(year%4==0&&year%100!=0)){
//             day2+=29;
//            }else{
//             day2+=28;
//            }
        //   }else{
//            day2+=30;
        //   }
          }
        this.day2=day2;
    }
    public void x() {
          int x=0;
          if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){ 
           x=31;
          }else if(month==2){
           if(year%400==0||(year%4==0&&year%100!=0)){
            x=29;
           }else{
            x=28;
           }
          }else{
           x=30;
          }
          this.x=x;
    }
    public void print() {
        int day3=day1+day2;//从1990年到我们要输出的日历哪月的总天数
          int kong=day3%7;//对其取余就可以得到这个月一号之前空余了多少天
          System.out.println("\t\t"+year+"年"+month+"月");
          System.out.println("一\t二\t三\t四\t五\t六\t七");
          int num=0;//每当num等于七我们就该换行了
          for(int a=1;a<=kong;a++){
           System.out.print("\t");
           num++;
          }
          for(int b=1;b<=x;b++){
               if(b==day){//将用户输入的那一天用特殊的*号标出来
                if(num==5||num==6){//将周末用【】标记出来
                System.out.print("【*"+b+"】\t");
                num++;
                }else{
                 System.out.print("*"+b+"\t");
                 num++;
                }
               }else{
                if(num==5||num==6){//将周末用【】标记出来
               System.out.print("【"+b+"】\t");
                  num++;
                }else{
                 System.out.print(b+"\t");
                    num++;
                }
               }
                  if(num==7){
                   System.out.println();
                   num=0;//开始新一轮的循环
                  }
              }
    }
}

 

posted on 2019-08-05 01:28  陈嵩  阅读(372)  评论(0)    收藏  举报