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);
}
}
错误:
Example.java:19: error: variable y might not have been initialized
System.out.println(y);
^
如果没有输入任何if
-分支,则y
永远不会初始化。由于访问未初始化的局部变量是非法的,编译器会生成一个错误(如JLS§16中所定义(。编译器无法推断必须输入三种情况中的一种。
我建议在第二种情况下使用else,而在第三种情况下则使用else:
import java.util.Scanner;
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;
}
else if (num < 100) {
y = 200;
}
else /* if (num == 100) */ {
y = 200;
}
System.out.println(y);
}
}
Ideone演示
Javac不进行流分析。换句话说,您知道num > 100
、num < 100
或num == 100
是true
,但javac不知道。在这种情况下,您可以将if
、else if
和else
组合起来,如下所示:
if (num > 100) {
y = 200;
} else if (num < 100) {
y = 200;
} else { // num == 100 must be true
y = 200;
}
您也可以为y
指定一些值(例如0
(,但上面的解决方案更清楚。