为什么这段代码在变量初始化方面是非法的?

-2 java variables initialization

import java.util.*;

class Example {

  public static void main(String args[]) {
    Scanner input = new Scanner(System.in);
    System.out.print("Input an integer : ");
    int num = input.nextInt();
    int y;
    if (num > 100) {
      y = 200;
    }
    if (num < 100) {
      y = 200;
    }
    if (num == 100) {
      y = 200;
    }
    System.out.println(y);
  }
}
Run Code Online (Sandbox Code Playgroud)

错误:

Example.java:19: error: variable y might not have been initialized
    System.out.println(y);

                   ^
Run Code Online (Sandbox Code Playgroud)

Tur*_*g85 5

如果没有if输入任何分支,y 则永远不会初始化。由于访问未初始化的局部变量是非法的,因此编译器会生成错误(如JLS 中定义的 \xc2\xa716)。编译器无法推断必须输入三种情况之一。

\n

我建议在第二种情况下使用 else if ,在第三种情况下使用 else :

\n
import java.util.Scanner;\n\nclass Example {\n\n  public static void main(String args[]) {\n    Scanner input = new Scanner(System.in);\n    System.out.print("Input an integer : ");\n    int num = input.nextInt();\n    int y;\n    if (num > 100) {\n      y = 200;\n    }\n    else if (num < 100) {\n      y = 200;\n    }\n    else /* if (num == 100) */ {\n      y = 200;\n    }\n    System.out.println(y);\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Ideone demo

\n