我准备写一个根据用户输入年份和月份打印出来当月的日历的代码,写了一半,编译的时候提示d2变量没有初始化the local variable b2 may not have been initialized.但是我在下面的for循环里面已经给d2赋值了呀,难道还要在申明b2的时候给他初始化一个值吗?d这个变量都没有初始化也没提示错误呀,请教各位前辈!不胜感激!
package com.dean;
import java.util.Scanner;
public class Calendar {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s = new Scanner(System.in);
int d;//存放1900年到year-1这么多年里面一共有多少天
int d2;//存放从year/1/1号到year/month/1这段时间一共有多少天
int i=0;//闰年计数器
int k;//k存放(d+d2)%7的值,对应的数值从0-6分别对应周日,周一,周二...到周六)
System.out.println("input the year:");
int year = s.nextInt();
System.out.println("input the month:");
int month = s.nextInt();
for (int n = 1900; n < year; n++) {
if ((n % 4 == 0) && (n % 100 != 0) || (n % 400 == 0))
i += 1;
}
d= (year-1900)*365+i;
for(int j=1;j<month;j++){
if (j==4 || j==6 || j==9 || j==11){
d2=30;
}else if(j==2){
if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)){
d2=29;
}
d2=28;
}else{
d2=31;
}
}
d=d+d2;
d++;
k= d%7;
System.out.println("Mon.\t"+"Tue.\t"+"Wed。\t"+"Thu\t"+"Fri.\t"+"Sat.\t"+"Sun.");
}
}
------解决思路----------------------
你确实在for循环中给d2赋值了,但是,循环体并不是一定会执行,如果不执行,d2就没有初始化,而d在for循环外就被赋值了,所以,编译器要求你初始化d2。