哪位高手帮我看看这个万年历的算法哪里错了啊 看了很久就是看不出来
还有就是遇到星期日自动换行的问题 如果1号是星期日怎么实现换行啊》?
import java.util.Scanner;public class MyCalendar {
int year;//输入的年份
int month;//输入的月份
int sum;//距离1900-1-1的天数
int thisyearday ;//输入的该年元旦至该月初的天数
int days;//输入的月份的天数
public MyCalendar() {
System.out.println("******************欢 迎 使 用 万 年 历******************");
Scanner input = new Scanner(System.in);
System.out.print("\n请选择年份: ");
year = input.nextInt();
System.out.print("\n请选择月份: ");
month = input.nextInt();
System.out.println();
sumDay();
thisYearDay();
printCalendar(month);
thisYearDay();
}
//判断是否闰年 判断年份是非闰年年还是闰年 闰年366 非闰年365
public void thisYearDay(){
for(int i=1;i<=month;i++){
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days=31;
break;
case 2:
if((year%4==0&&year%100!=0)||(year%400==0)){
days=29;
}else{
days=28;
}
break;
default:days=30;
}
if(i<month){
sum=sum+days;
}
}
}
//距离1900年1月1日所差天数
public void sumDay(){ int leap=0; int nonleap=0;
for(int i=1900;i<year;i++){
//判断是否闰年
if((year%4==0&&year%100!=0)||(year%400==0)){
sum=sum+366;
}
else{
sum=sum+365;
}
}
} public void printCalendar(int m) {
int a;
a=sum%7;
System.out.println(a);
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t"); for(int i=0;i<a;i++){
System.out.print("\t");
} for(int j=1;j<=days;j++){
System.out.print(j+"\t");
if((j+a)%7==0){
System.out.println();
}
else if(a%7==0){
// System.out.println(); }
}
}
/**
* @param args
*/
public static void main(String[] args) {
new MyCalendar();
}}
还有就是遇到星期日自动换行的问题 如果1号是星期日怎么实现换行啊》?
import java.util.Scanner;public class MyCalendar {
int year;//输入的年份
int month;//输入的月份
int sum;//距离1900-1-1的天数
int thisyearday ;//输入的该年元旦至该月初的天数
int days;//输入的月份的天数
public MyCalendar() {
System.out.println("******************欢 迎 使 用 万 年 历******************");
Scanner input = new Scanner(System.in);
System.out.print("\n请选择年份: ");
year = input.nextInt();
System.out.print("\n请选择月份: ");
month = input.nextInt();
System.out.println();
sumDay();
thisYearDay();
printCalendar(month);
thisYearDay();
}
//判断是否闰年 判断年份是非闰年年还是闰年 闰年366 非闰年365
public void thisYearDay(){
for(int i=1;i<=month;i++){
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days=31;
break;
case 2:
if((year%4==0&&year%100!=0)||(year%400==0)){
days=29;
}else{
days=28;
}
break;
default:days=30;
}
if(i<month){
sum=sum+days;
}
}
}
//距离1900年1月1日所差天数
public void sumDay(){ int leap=0; int nonleap=0;
for(int i=1900;i<year;i++){
//判断是否闰年
if((year%4==0&&year%100!=0)||(year%400==0)){
sum=sum+366;
}
else{
sum=sum+365;
}
}
} public void printCalendar(int m) {
int a;
a=sum%7;
System.out.println(a);
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t"); for(int i=0;i<a;i++){
System.out.print("\t");
} for(int j=1;j<=days;j++){
System.out.print(j+"\t");
if((j+a)%7==0){
System.out.println();
}
else if(a%7==0){
// System.out.println(); }
}
}
/**
* @param args
*/
public static void main(String[] args) {
new MyCalendar();
}}
public class Calendar {
/**
* 计算year年month月day日是星期几---蔡勒函数
* @param year
* @param month
* @param day
* @return
*/
public static int weekDay(int year,int month,int day)
{
if(month==1) month=13;
if(month==2) month=14;
int week=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
return week+1;
}
/**
* 打印出日历
* @param year
* @param month
*/
public static void calendar(int year,int month)
{
//得到该年该月第一天的星期
int nowDay=weekDay(year,month,1);
//判断该年该月的天数
int dayNumber=dayNumber(year,month);
//打印表头
System.out.println("一\t二\t三\t四\t五\t六\t日\t");
//前面空几格【空格数目就是星期几】
for(int i=1;i<nowDay;i++)
System.out.print("\t");
//打印出日期
for(int i=1;i<=dayNumber;i++)
{
System.out.print(i+"\t");
//每隔7天就换一行
if((i+nowDay-1)%7==0)
System.out.println();
}
}
/**
* 判断year年month月是多少天
* @param year
* @param month
* @return
*/
public static int dayNumber(int year,int month)
{
//闰年的月份天数
int []runYear={0,31,29,31,30,31,30,31,31,30,31,30,31};
//平年的月份天数
int []pingYear={0,31,28,31,30,31,30,31,31,30,31,30,31};
//如果为闰年
if(leapYear(year))
{
return runYear[month];
}
else
return pingYear[month];
}
/**
* 判断是否为闰年,如果为闰年就返回一个真值
* @param year
* @return
*/
public static boolean leapYear(int year)
{
boolean bool=false;
//闰年判断方法 4年一润 100年不润 400年润 3200年不润
if( ( year %4 == 0 && year %100 != 0) || (year % 400 == 0))
bool=true;
return bool;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Calendar.calendar(2010, 6);
}
}