Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 变量可能尚未初始化_Java_Variables_Initialization - Fatal编程技术网

Java 变量可能尚未初始化

Java 变量可能尚未初始化,java,variables,initialization,Java,Variables,Initialization,对于我的Comp Sci类,我必须制作一个程序,查找给定月份(1-12)的天数,你知道为什么我在尝试从开关返回int“days”时出现错误“variable days not have initialized”?代码如下: public static int getNumberofDays(int month,int year) { // Imports the required Scanner Scanner kbd = new Scanner(System.in

对于我的Comp Sci类,我必须制作一个程序,查找给定月份(1-12)的天数,你知道为什么我在尝试从开关返回int“days”时出现错误“variable days not have initialized”?代码如下:

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;
   }
  • 最后一个字符串月份无效,因为
    月份
    作为参数提供给函数

  • 您没有在所有控制路径上初始化
    days
    :您的
    开关中的
    default
    块不起作用。这是Java的一个很好的特性,因为它可以帮助您实现程序的稳定性。没有什么比编译器告诉你该怎么做更好的了不要通过写入
    final int days=0强制发布;而是在
    default
    块中为其指定一个值

  • 为什么出现错误“可变天数可能尚未初始化”

    因为:

    final int days;
    
    应该是:

    int days = 0;
    
    为什么?

    • 应该初始化方法中的变量
    • 不能修改最终变量

    其他错误:
    • switch
    • 定义一个
      字符串month
      ,将参数
      int month
    • 扫描仪
      未使用
    • 还有很多。。。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;
    }
    

    我的解决方案:!:
    解决方案:
    Java-8

    添加
    days=0设置为默认情况,如下所示:

    default: 
        month = "invalid";
        days = 0;
            break;
    
    在尝试返回之前,必须在代码路径的某个位置为
    days
    指定一个值。您还应该替换
    final int days
    整数天
    此外,您不能有
    最终字符串month
    ,因为
    month
    是作为参数传递给函数的。。只需删除月的重新声明,您就是黄金。

    并非所有可能的代码路径都为days变量赋值。默认块确实不存在

    default: month = "invalid";
               break;
    
    如果你把它改成

    default: month = "invalid";
             days=0
               break;
    
    警告消失了

    我的其他问题是:

    • 为什么要定义字符串month,从而隐藏参数month
    • 扫描仪是干什么用的
    • 为什么在默认块中为月份指定无效值,而从不返回它

    您发布的代码不准确。这会引发另一个编译错误。这是一个多么棘手的问题!一种方法有这么多错误,很酷!你的重复作业很难看,这意味着你不能再使用
    final
    @Neil agree,copy-paste-error,modified@芭丝谢芭:我不使用final,但同意重复陈述。。。我的错误和修正我们都忽略了一个事实,
    month
    是作为函数参数传递的。@jordica仍然有点让家庭作业失去乐趣,不是吗?;)这会解决问题,但解释一下原因会很好。编辑:我收回这句话,这只会解决两个问题中的一个。。我也需要早上的咖啡好的,别着急。。savages Lol,尤其是现在我更仔细地阅读了这个程序,值得一提的是,Java8现在允许您简单地这样做,以获得月份天数:
    YearMonth yearmonthboject=YearMonth.of(1999,2);int daysInMonth=yearmonthbobject.lengthOfMonth()确实如此。我假设(可能是疯狂地)这是一个学校的练习。这似乎是正确的,但上帝禁止一个专业程序员偶然发现这一页并将那个巨大的switch语句复制到他的程序中。
    
    default: month = "invalid";
               break;
    
    default: month = "invalid";
             days=0
               break;