首先,输出的日历不准确,今天是22号星期五,可是
*********欢迎使用万年历查询时间*********请输入年份:2010
2010是平年请输入月份:10
星期天 星期一 星期二 星期三 星期四 星期五 星期六 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Process completed.然后1900年是星期几,我也不确定,所以几处不明白,红线部分。最后,在JCreator中,怎样让星期和日期格式对好,上面复制的没问题,但在J中
不是这样的。 耐心看看,感激不尽!!!附代码
import java.util.*;
public class Calendar {
public static void main (String[] args) {
int years,months,day_1,day_2,sum_1,sum_2,sum,firstDay;
boolean testYear;
System.out.print("\n");
System.out.print("*********欢迎使用万年历查询时间*********");
System.out.println ("\n");
System.out.print("请输入年份:");
Scanner input=new Scanner(System.in);
years=input.nextInt();
day_1=0;
day_2=0;
sum_1=0;
sum_2=0;
sum=0;
firstDay=0;
if((years%4==0&&years%100!=0)||years%400==0)
{
System.out.println ("\t"+years+"是闰年");
testYear=true;
}
else{
System.out.println ("\t"+years+"是平年");
testYear=false;
}
for(int i=1900;i<years;i++)
{
if((i%4==0&&i%100!=0)||i%400==0)
{
day_1=366;
}
else
{
day_1=365;
}
sum_1=sum_1+day_1; //计算从输入年份1月1号到1900年1月1号总天数
}
System.out.println ();
System.out.print("请输入月份:");
months=input.nextInt();
/*
*计算输入的月份到该年份的天数
*/
for(int j=1;j<months;j++)
{
if(j==2)
{
if(testYear=true)
{
sum_2=29+sum_2;
}
else{
sum_2=28+sum_2;
}
}
else if((j==4)||(j==6)||(j==9)||(j==11))
{
sum_2=30+sum_2;
}
else
{
sum_2=31+sum_2;
}
}
if(months==2)
{
if(testYear)
{
day_2=29;
}
else
{
day_2=28;
}
}
else if((months==4)||(months==6)||(months==9)||(months==11))
{
day_2=30;
}
else
{
day_2=31;
}
sum=sum_1+sum_2; //累加记录距离1900年1月1号的天数
System.out.print("\n\n");
System.out.println ("星期天"+"\t星期一"+"\t星期二"+"\t星期三"+"\t星期四"+
"\t星期五"+"\t星期六"+"\n");
int temp=1+sum%7; //计算该月份的第一天是星期几
/**周一-周六:使用数字1-6表示,周日用0表示*/
if(temp==7)
{
firstDay=0;
}
else{
firstDay=temp;
}
for(int nullNo=0;nullNo<firstDay;nullNo++)
{
System.out.print("\t"); //循环输出第一行的空格
}
for(int x=1;x<=day_2;x++)
{
System.out.print(x+"\t");
if((sum+x-1)%7==5)
{
System.out.print("\n");//判断当前日x是否是周六,如果是,换行
}
}
}
}
*********欢迎使用万年历查询时间*********请输入年份:2010
2010是平年请输入月份:10
星期天 星期一 星期二 星期三 星期四 星期五 星期六 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Process completed.然后1900年是星期几,我也不确定,所以几处不明白,红线部分。最后,在JCreator中,怎样让星期和日期格式对好,上面复制的没问题,但在J中
不是这样的。 耐心看看,感激不尽!!!附代码
import java.util.*;
public class Calendar {
public static void main (String[] args) {
int years,months,day_1,day_2,sum_1,sum_2,sum,firstDay;
boolean testYear;
System.out.print("\n");
System.out.print("*********欢迎使用万年历查询时间*********");
System.out.println ("\n");
System.out.print("请输入年份:");
Scanner input=new Scanner(System.in);
years=input.nextInt();
day_1=0;
day_2=0;
sum_1=0;
sum_2=0;
sum=0;
firstDay=0;
if((years%4==0&&years%100!=0)||years%400==0)
{
System.out.println ("\t"+years+"是闰年");
testYear=true;
}
else{
System.out.println ("\t"+years+"是平年");
testYear=false;
}
for(int i=1900;i<years;i++)
{
if((i%4==0&&i%100!=0)||i%400==0)
{
day_1=366;
}
else
{
day_1=365;
}
sum_1=sum_1+day_1; //计算从输入年份1月1号到1900年1月1号总天数
}
System.out.println ();
System.out.print("请输入月份:");
months=input.nextInt();
/*
*计算输入的月份到该年份的天数
*/
for(int j=1;j<months;j++)
{
if(j==2)
{
if(testYear=true)
{
sum_2=29+sum_2;
}
else{
sum_2=28+sum_2;
}
}
else if((j==4)||(j==6)||(j==9)||(j==11))
{
sum_2=30+sum_2;
}
else
{
sum_2=31+sum_2;
}
}
if(months==2)
{
if(testYear)
{
day_2=29;
}
else
{
day_2=28;
}
}
else if((months==4)||(months==6)||(months==9)||(months==11))
{
day_2=30;
}
else
{
day_2=31;
}
sum=sum_1+sum_2; //累加记录距离1900年1月1号的天数
System.out.print("\n\n");
System.out.println ("星期天"+"\t星期一"+"\t星期二"+"\t星期三"+"\t星期四"+
"\t星期五"+"\t星期六"+"\n");
int temp=1+sum%7; //计算该月份的第一天是星期几
/**周一-周六:使用数字1-6表示,周日用0表示*/
if(temp==7)
{
firstDay=0;
}
else{
firstDay=temp;
}
for(int nullNo=0;nullNo<firstDay;nullNo++)
{
System.out.print("\t"); //循环输出第一行的空格
}
for(int x=1;x<=day_2;x++)
{
System.out.print(x+"\t");
if((sum+x-1)%7==5)
{
System.out.print("\n");//判断当前日x是否是周六,如果是,换行
}
}
}
}
第一处红色的地方有问题吧,sum是距离1900年1月1日的天数,当天是星期几要考虑的,除非当天是星期天
然后修改一下显示就没问题了
if (temp == 0) {
firstDay = 0;
} else {
firstDay = temp;
}
1900一月一号星期几,这很重要。
Calendar类我了解,只是我想按书上的要求来。
public int isleap(int y){
return( (y%4==0&&y%100!=0||y%400==0)?1:0 );
}
public int per_year_day_week(int y){
return( (y+y/4-y/100+y/400)%7 );
}
public int per_month(int y,int m){
int month_every_day[][]={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
return month_every_day[isleap(y)][m-1];
}
public String eglish_month(int i){
String[] str = {"January","February","March","Aril","May","June",
"July","August","September","October","November","December"};
return str[i];
}
}public class Calendar {
public static void main(String[] args) {
Date date = new Date();
int i,day,year,weekday;
Scanner scan =new Scanner(System.in);
System.out.print("Please input a year:");
year = scan.nextInt();
System.out.println("\n\t\t"+year+"年日历如下:");
weekday = date.per_year_day_week(year);
for (i=1;i<=12;i++){
System.out.print("\n"+date.eglish_month(i-1)+"-"+year);
System.out.println("\n---------------------------------------------------");
System.out.println("Sun\tMon\tTue\tWed\tThu\tFri\tSat");
for (day=0;day<weekday;day++){
System.out.print("\t");
}
for (day=1;day<=date.per_month(year,i);day++){
System.out.print(day+"\t");
weekday = (weekday+1)%7;
if(weekday==0){
System.out.println("");
}
}
System.out.println("\n---------------------------------------------------");
}
}
}
////////////////////////////////////////////////////////////////////
October-2010
---------------------------------------------------
Sun Mon Tue Wed Thu Fri Sat
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
---------------------------------------------------
---------------------------------------------------
Sun Mon Tue Wed Thu Fri Sat
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
---------------------------------------------------
但就是跟实际的天数晚一天。
怎么办
import java.util.*;
public class Calendar {
public static void main (String[] args) {
int years,months,day_1,day_2,sum_1,sum_2,sum,firstDay;
boolean testYear;
System.out.print("\n");
System.out.print("*********欢迎使用万年历查询时间*********");
System.out.println ("\n");
System.out.print("请输入年份:");
Scanner input=new Scanner(System.in);
years=input.nextInt();
day_1=0;
day_2=0;
sum_1=0;
sum_2=0;
sum=0;
firstDay=0;
if(((years%4==0)&&(years%100!=0))||(years%400==0))
{
System.out.println ("\t"+years+"是闰年");
testYear=true;
}
else{
System.out.println ("\t"+years+"是平年");
testYear=false;
}
for(int i=1900;i<years;i++)
{
if(((i%4==0)&&(i%100!=0))||(i%400==0))
{
day_1=366;
}
else
{
day_1=365;
}
sum_1=sum_1+day_1; //计算从输入年份1月1号到1900年1月1号总天数
}
System.out.print("\n");
System.out.print("请输入月份:");
months=input.nextInt();
/*
*计算输入的月份到该年份的天数
*/
for(int j=1;j<months;j++)
{
if(j==2)
{
if(testYear=true)
{
sum_2=29+sum_2;
}
else{
sum_2=28+sum_2;
}
}
else if((j==4)||(j==6)||(j==9)||(j==11))
{
sum_2=30+sum_2;
}
else
{
sum_2=31+sum_2;
}
}
if(months==2)
{
if(testYear)
{
day_2=29;
}
else
{
day_2=28;
}
}
else if((months==4)||(months==6)||(months==9)||(months==11))
{
day_2=30;
}
else
{
day_2=31;
}
sum=sum_1+sum_2;
//累加记录距离1900年1月1号的天数
System.out.print("\n\n");
System.out.println ("星期天"+"\t星期一"+"\t星期二"+"\t星期三"+"\t星期四"+
"\t星期五"+"\t星期六"+"\n");
int temp=1+sum%7; //计算该月份的第一天是星期几,1990年1月1号是星期一
/**周一-周六:使用数字1-6表示,周日用0表示*/
if(temp==7)
{
firstDay=0;
}
else{
firstDay=temp;
}
for(int nullNo=0;nullNo<firstDay;nullNo++)
{
System.out.print("\t"); //循环输出第一行的空格
}
for(int x=1;x<=day_2;x++)
{
System.out.print(x+"\t");
if((sum+x-1)%7==5)
{
System.out.print("\n");//判断当前日x是否是周六,如果是,换行
}
}
}
}
import java.util.Scanner;
class FunctionDate{
int[][] days = {{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
//判断是否是闰年
int is_leap_year(int y){
return( (y%4==0&&y%100!=0||y%400==0)?1:0 );
}
//某月共有多少天
int every_month_days(int y,int m){
return days[is_leap_year(y)][m-1];
}
//某年的某个月的第一天是星期几
int empty_year(int y,int m){
int emptys = 1;//当天算在内,故初值为1
for (int i = 0; i < m-1; i++) {
emptys += days[is_leap_year(y)][i];
}
emptys += (y-1)+(y-1)/4-(y-1)/100+(y-1)/400;
return emptys%7;
}
}
public class NewCalendar {
public static void main(String[] args){
int year = 0,month = 0;
int empty = 0,isleap = 0; FunctionDate fd = new FunctionDate();
Scanner sacn = new Scanner(System.in);
//输入年份
System.out.println("please input a year;");
year = sacn.nextInt();
//输入月份
System.out.println("please input a month;");
month = sacn.nextInt();
//打印某年某月日历
System.out.println("\t\t\t"+month+"-"+year);
System.out.println("\n=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=");
System.out.println("星期天\t"+"星期一\t"+"星期二\t"+
"星期三\t"+"星期四\t"+"星期五\t"+"星期六\t");
empty = fd.empty_year(year, month);
for (int i = 0; i < empty; i++) {
System.out.print("\t");
}
for (int i = 1; i <= fd.every_month_days(year, month); i++) {
System.out.print(i+"\t");
empty = (empty + 1)%7;
if(empty == 0)
System.out.println("");
}
System.out.println("\n=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=");
}
}