周末学习总结
刚刚开始学习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;//开始新一轮的循环 } } } }
浙公网安备 33010602011771号