变量可能尚未初始化

Moo*_*ial -1 java variables initialization

对于我的Comp Sci课程,我必须创建一个程序来查找给定月份(1-12)中的天数,你知道为什么我在尝试时遇到错误"变量天数可能没有被初始化"从交换机返回int"days"?这是代码:

public static int getNumberofDays(int month,int year)
   {
      // Imports the required Scanner
      Scanner kbd = new Scanner(System.in);

      final String month;
      final int days;
      switch (month) {
         case 1:  days = 31;
            break;
         case 2:  if ((year % 4 == 0) && year % 100 != 0)
                  {
                     days = 29;
                  }
                  else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0))
                  {
                     days = 29;
                  }
                  else
                  {
                     days = 28;
                  }
            break;
         case 3:  days = 31;
            break;
         case 4:  days = 30;
            break;
         case 5:  days = 30;
            break;
         case 6:  days = 31;
            break;
         case 7:  days = 31;
            break;
         case 8:  days = 31;
            break;
         case 9:  days = 30;
            break;
         case 10: days = 31;
            break;
         case 11: days = 30;
            break;
         case 12: days = 31;
            break;
         default: month = "invalid";
            break;
      }
      return days;
   }
Run Code Online (Sandbox Code Playgroud)

Jor*_*lla 6

为什么我收到错误"变量天可能没有被初始化"

因为:

final int days;
Run Code Online (Sandbox Code Playgroud)

应该:

int days = 0;
Run Code Online (Sandbox Code Playgroud)

为什么?

  • 应初始化方法中的变量
  • 最终变量无法修改.

其他错误:

  • 你不覆盖所有可能的值monthswitch
  • 你定义一个String month,遮蔽参数int month
  • Scanner未使用
  • 更多... XD

我的解决方案用你的方式

此外,如果您不打破案例块,则会执行下一个案例块,这意味着您可以执行以下操作:

public static int getNumberofDays(int month,int year) {
    switch (month) {
       case 1:  
       case 3:  
       case 6:  
       case 7:  
       case 8:
       case 10: 
       case 12: 
             days = 31;
          break;
       case 4:
       case 5:
       case 9:
       case 11: 
             days = 30;
          break;
       case 2:  
          if ((year % 4 == 0) && year % 100 != 0)
          {
             days = 29;
          }
          else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0))
          {
             days = 29;
          }
          else
          {
             days = 28;
          }
          break;
       default: days = -1;
          break;
    }
    return days;
}
Run Code Online (Sandbox Code Playgroud)

我的解决方案:Calendar!:

public static int getNumberofDays(int month,int year)
{
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.MONTH, month);
    cal.set(Calendar.YEAR, year);
    return cal.getActualMaximum(Calendar.DAY_OF_MONTH); 
}
Run Code Online (Sandbox Code Playgroud)

尼尔解决方案:Java-8

public static int getNumberofDays(int month,int year)
{
    YearMonth yearMonthObject = YearMonth.of(year, month); 
    return yearMonthObject.lengthOfMonth();
}
Run Code Online (Sandbox Code Playgroud)

  • @JordiCastilla虽然带来了家庭作业的乐趣,不是吗?;) (3认同)