我用java生成一个日历 ,输入同一年,同一个月计算出来的该月第一天是星期几总是不一样? 为什么?

我之前也搜索过这个问题,有的人在说zongtianshu一直在变化! 但是我输入的是同一年同一个月 输出的结果为什么不一样?
import java.util.*;
public class rili {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int niantianshu=0;//声明1900到输入年份的总天数
int pingnian=365;//声明平年的总天使为365
int runnian=366;//声明闰年的总天数为366
int n2yue=0;//声明2月分的天数

for(;;){
System.out.println("请输入年份:");
int nfen=in.nextInt();//接受输入年份
System.out.println("请输入月份:");
int yuefen=in.nextInt();//接受输入月份
System.out.println("——————"+nfen+"年"+yuefen+"月——————");
System.out.println("日\t一\t二\t三\t四\t五\t六");//输出日历格式

if((nfen%4)==0&&(nfen%100)!=0||(nfen%400)==0){
n2yue=n2yue+29;
}else{
n2yue=n2yue+28;
}//判断输入年份的二月的天数

for(int a=1900;a<=(nfen-1);a++){
if((a%4)==0&&(a%100)!=0||(a%400)==0){
niantianshu=niantianshu+runnian;
}else{
niantianshu=niantianshu+pingnian;
}
}//计算1900到输入年份的总天数

int yuetianshu=0;//声明yuetianshu为月的总天数
for(int b=1;b<=(yuefen-1);b++){
if(b==3){
yuetianshu=yuetianshu+n2yue;
}else if(b==5||b==7||b==10||b==12){
yuetianshu=yuetianshu+30;
}else if(b==2||b==4||b==6||b==8||b==9||b==11){
yuetianshu=yuetianshu+31;
}
}//计算输入月份的月总天数

int zongtianshu=niantianshu+yuetianshu;
zongtianshu+=1;
int yushu=zongtianshu%7;
for(int c=1;c<=yushu;c++){
System.out.print("\t");
}//计算该月份第一天是星期几

int yuetianshu=0;//声明yuetianshu为月的总天数
for(int b=1;b<=(yuefen-1);b++){
if(b==3){
yuetianshu=yuetianshu+n2yue;
}else if(b==5||b==7||b==10||b==12){
yuetianshu=yuetianshu+30;
}else if(b==2||b==4||b==6||b==8||b==9||b==11){
yuetianshu=yuetianshu+31;
}
}//计算输入月份的月总天数

这里面有问题:
1、你没有算1月份
2、7、8月是31天。。你写成了8、9月追问

如果我计算的是1月份,那么我再加上1月份的天数就变成是2月份拉, 如此类推:1月份=0 2月份=0+一月份,3月份=0+一月份+二月份;..........;

追答

明白你意思了,
int niantianshu=0;//声明1900到输入年份的总天数

这一行代码位置不对。
你放在了for循环外面,导致每次循环开始时,值没有初始化为0,而是用的上一次循环中计算出来的值,所以会不对。
把这一行代码放在for循环里面就行了

温馨提示:答案为网友推荐,仅供参考
相似回答