老师要求做一个日期查询,不知道有没错误。要求输入年、月、日得到星期几和该月的日历。。。做得自己都发觉很烂,
老师要求做一个日期查询,不知道有没错误。
要求输入年、月、日得到星期几和该月的日历。。。
做得自己都发觉很烂,不知道怎么改进,请达人指点
- Java code
import java.util.Scanner;class WNL2{ public static void main(String[] args) { Scanner sc=new Scanner(System.in); int a=4,c=1970,d,x=0,b,m,q; System.out.print("请输入大于1969年的年份:"); do{ b=sc.nextInt(); if (b<1970){ System.out.print("无效,请重新输大于1969的年份:"); } }while(b<1970); System.out.print("请输入月:"); do{ m=sc.nextInt(); if (m<1||m>12){ System.out.print("无效,请重新输1~12之间的月份:"); } }while(m<1||m>12); System.out.print("请输入日:"); do{ q=sc.nextInt(); if (q<1||q>31){ System.out.print("无效,请重新输1~31之间的日期:"); } }while(q<1||q>31); if (m==2&&q>28&&!((b%4==0&&b/100!=0)||b/400==0)){ System.out.print("无效,请重新输1~28之间的日期:"); q=sc.nextInt(); } if (m==2&&q>29&&((b%4==0&&b/100!=0)||b/400==0)){ System.out.print("无效,请重新输1~29之间的日期:"); q=sc.nextInt(); } System.out.println("--------------------------------------"); //以1970年1月1日星期4为参照; d=b-c; for (int i=0;i<d ;i++ ){ c++; if ((c%4==0&&c/100!=0)||c/400==0){ x++; //x计数器为闰年增加的天数; continue; } } int z=(d+x)%7; //z为增加天数取模(一个星期为7天); if ((c%4==0&&c/100!=0)||c/400==0){ z=(d+x-1)%7; //如果该年是闰年则要减去多加的一天; } int y=a+z; //y为4加上d年后多余的天数; if (a+z>7){ y=a+z-7; //如果大于7则是下一个星期; } int s=0; //用一个数组定义12个月的天数; int [] array=new int[]{31,28,31,30,31,30,31,31,30,31,30,31}; for (int j=0;j<m-1 ;j++ ){ if ((c%4==0&&c/100!=0)||c/400==0){ array[1]=29; //闰年则二月29天; } s+=array[j]; } int w=(s+q)%7+y; if (w>7){ w=w-7; //当w-7的值为1时,则为星期天; } switch(w){ case 2:System.out.println("您查询的日期是:星期一");break; case 3:System.out.println("您查询的日期是:星期二");break; case 4:System.out.println("您查询的日期是:星期三");break; case 5:System.out.println("您查询的日期是:星期四");break; case 6:System.out.println("您查询的日期是:星期五");break; case 7:System.out.println("您查询的日期是:星期六");break; case 8:System.out.println("您查询的日期是:星期天");break; default :System.out.println("您查询的日期是:星期天"); } System.out.println("--------------------------------------");//================================================以上为查询某日星期几的代码; System.out.println((m)+"月的所有日期为:"); int l=s%7+y; if (l>7){ l=l-7; } //l代表每个月1号星期几; //System.out.println(l); System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六"); for (int e=0;e<1 ;e++ ){ int o=0; for (int h=0;h<l ;h++ ){ //需输入空格的次数; if (l==7) //当此月的第一天为星期一时,跳出; { break; } o++; System.out.print("\t"); } for (int p=1;p<=array[m-1] ;p++ ){ //从第几个开始输入日期(m-1)的意思为:在数组中存储的m月的天数下标是m-1; System.out.print(p+"\t"); if (o+p==7||(o+p)%7==0){ //输到星期六则换行; System.out.println(); } } } }}
[解决办法]
昏倒,你为什么不用java.util.Calendar来搞,查下API
[解决办法]
新手写这么多挺有毅力了.看API是必须的,一开始很挣扎,都有个过程.推荐看英文的,技术想提高,必须多看英文书
[解决办法]
这是我写,参考一下。
//PrintCalendar.java:Print a calendar for a given month in a year
import javax.swing.JOptionPane;
public class PrintCalendar{
/**main method*/
public static void main(String[] args){
//prompt user to input year
String yearString=JOptionPane.showInputDialog(null,"Enter full year (i.e. 2001)",
"Example 4.6 Input",JOptionPane.QUESTION_MESSAGE);
//convert yearString into a integer
int year=Integer.parseInt(yearString);
//prompt user to input month
String monthString=JOptionPane.showInputDialog(null,"Enter month in number between 1 and 12",
"Example 4.6 Input",JOptionPane.QUESTION_MESSAGE);
//conbert monthString into a integer
int month=Integer.parseInt(monthString);
//print the calendar
printMonth(year,month);
}
/**printMonth method*/
static void printMonth(int year,int month){
//print calendar title
printMonthTitle(year,month);
//getstartDay
int startDay=getStartDay(year,month);
//getnumOfDays
int numOfDaysInMonth=getNumOfDaysInMonth(year,month);
//print monthbody
printMonthBody(startDay,numOfDaysInMonth);
}
/**get startDay*/
static int getStartDay(int year,int month){
int startDay1800=3;
return (int)(startDay1800+getTotalNumOfDays(year,month))%7;
}
//get totalNumOfDays
static long getTotalNumOfDays(int year,int month){
long total=0;
for(int i=1800;i<year;i++)
if(isLeapYear(i))
total+=366;
else total+=365;
for(int j=1;j<month;j++)
total+=getNumOfDaysInMonth(year,j);
return total;
}
//get numOfDaysInMonth
static int getNumOfDaysInMonth(int year,int month){
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
return 31;
else if(month==4||month==6||month==9||month==11)
return 30;
else if(month==2)
if(isLeapYear(year))
return 29;
else return 28;
else return 0;
}
//judge wether a year is l leapyear
static boolean isLeapYear(int year){
if((year%400==0)||((year%4==0)&&(year%100!=0)))
return true;
else
return false;
}
//print monthbody
static void printMonthBody(int startDay,int numOfDaysInMonth){
for(int i=0;i<startDay;i++)
System.out.print(" ");
for(int j=1;j<=numOfDaysInMonth;j++){
if(j<10)
System.out.print(" "+j);
else
System.out.print(" "+j);
if((startDay+j)%7==0)
System.out.println();
}
}
//print printMonthTitle
static void printMonthTitle(int year,int month){
System.out.println(" "+getMonthName(month)+" "+year);
System.out.println("----------------------------");
System.out.println(" Sun Mon Tue Wed Thu Fri Sat");
}
//get monthName
static String getMonthName(int month){
String monthName=" ";
switch(month){
case 1:monthName="January";break;
case 2:monthName="February";break;
case 3:monthName="March";break;
case 4:monthName="April";break;
case 5:monthName="May";break;
case 6:monthName="June";break;
case 7:monthName="July";break;
case 8:monthName="August";break;
case 9:monthName="September";break;
case 10:monthName="October";break;
case 11:monthName="November";break;
case 12:monthName="December";break;
}
return monthName;
}
}
