【问题标题】:How can i declare a value in an if statement? (In java)如何在 if 语句中声明一个值? (在Java中)
【发布时间】:2013-02-06 01:47:53
【问题描述】:

所以这就是我到目前为止所拥有的,我不知道为什么程序没有按照我想要的方式响应。不断显示“avg2 可能尚未初始化”。有什么想法吗??

if (a < b && a < c) {
    System.out.println("The lowest score was: " + a);
    System.out.println("The average without the lowest score is: " + ((b + c) / 2));
    avg2 = ((b + c) / 2);
}

if (b < a && b < c) {
    System.out.println("The lowest score was: " + b);
    System.out.println("The average without the lowest score is: " + ((a + c) / 2));
    avg2 = ((a + c) / 2);
}

if (c < a && c < b) {
    System.out.println("The lowest score was: " + c);
    System.out.println("The average without the lowest score is: " + ((a + b) / 2));
    avg2 = ((a + b) / 2);
}

【问题讨论】:

  • 这只是一个警告,但您可以将其初始化为 0 以避免这种情况。
  • @KarthikT 它对我来说更像是一个编译错误......avg2 是一个类或实例变量,不会有任何消息,或者它是一个局部变量,它不会t 编译。

标签: java if-statement variable-declaration


【解决方案1】:

我想你已经像这样声明了 avg2:double avg2; 没有初始值。问题是,如果 a == b == c 例如,您的任何 if 条件都不会为真,avg2 将不会被初始化。

  • 解决方案1:初始化avg2:double avg2 = 0;
  • 解决方案 2(更好):使用 if / else if / else 语法代替连续的 if。如果有 else ,编译器会满意 avg2 总是被初始化。

【讨论】:

    【解决方案2】:

    问题在于,在编译器看来,似乎存在一条通过代码的可能路径,其中没有满足 if 语句条件。如果是这种情况,则不会对 avg2 进行任何分配。

    【讨论】:

      【解决方案3】:

      因为编译器无法知道 if 条件之一将评估为真,因此 avg2 将被分配。一种解决方法是无条件设置else

      if (c < a && c < b) {
       ....
      } else {
         throw new RuntimeException("Cannot be here");
      }
      
      // now use can use avg2 here
      

      【讨论】:

        【解决方案4】:

        要修复“未初始化”错误,您应该将 3 个 if 语句重新排列到一个 if-else 块中。编译器不会测试 if 语句的条件是否为真,但是如果您在 if-else 块的每个部分内分配变量(必须包括“if all else failed” else),它将不可避免地被初始化。

        double avg2;
        if (a < b && a < c)
        {
            System.out.println("The lowest score was: " + a);
            System.out.println("The average without the lowest score is: " + ((b + c) / 2));
            avg2 = ((b + c) / 2);
        }else if (b < a && b < c)
        {
            System.out.println("The lowest score was: " + b);
            System.out.println("The average without the lowest score is: " + ((a + c) / 2));
            avg2 = ((a + c) / 2);
        }else {
            System.out.println("The lowest score was: " + c);
            System.out.println("The average without the lowest score is: " + ((a + b) /2));
            avg2 = ((a + b) / 2);
        }
        

        执行此过程的更好方法:

        double avg2;
        double lowest = a;
        if(lowest > b)
            lowest = b;
        if(lowest > c)
            lowest = c;
        System.out.println("The lowest score was: " + lowest);
        avg2 = (a + b + c - lowest)/2;
        System.out.println("The average without the lowest score is: " + avg2);
        

        【讨论】:

          【解决方案5】:

          那段代码伤害了我的眼睛,我觉得有必要发布这个答案:)

          double lowest = Math.min(Math.min(a, b), c);
          double avg2 = (a + b + c - lowest) / 2;
          System.out.println("The lowest score was: " + lowest);
          System.out.println("The average without the lowest score is: " + avg2);
          

          只有 4 行而不是 15 行,并且此代码不会生成该警告,因为正在初始化变量。

          可能警告是因为变量正在 if 语句中初始化,最终可能不会发生...

          【讨论】:

            猜你喜欢
            • 2021-03-04
            • 2013-07-09
            • 2014-08-26
            • 2014-04-12
            • 1970-01-01
            • 1970-01-01
            • 2016-01-13
            • 1970-01-01
            • 2021-06-23
            相关资源
            最近更新 更多