在此计划中,为什么我必须初始化a
和b
,因为它们的范围不受限制,但我无法在d=a+b
行上使用它们?< / p>
import java.util.Scanner;
class DivAndSum {
public static void main(String[] args) {
int a = 0, b = 0;
Scanner kb = new Scanner(System.in);
try {
a = kb.nextInt();
b = kb.nextInt();
int c = a / b;
System.out.println("Div=" + c);
} catch (ArithematicException e) {
System.out.println("Please Enter a non zero denominator");
} catch (InputMismatchException e) {
System.out.println("Please Enter integers only");
System.exit(0);
}
int d = a + b;
System.out.println("Sum=" + d);
}
}
并且下面的程序编译得很好:
import java.util.Scanner;
class DivAndSum {
public static void main(String[] args) {
int a,b,d;
Scanner kb = new Scanner(System.in);
a = kb.nextInt();
b = kb.nextInt();
d = a + b;
System.out.println("Sum=" + d);}}
答案 0 :(得分:2)
如果您在谈论int a=0,b=0;
,那么a
和b
都是局部变量,局部变量必须初始化
只需要初始化类级别和实例级别变量
如果您不想初始化,请参阅下面的代码
import java.util.Scanner;
class DivAndSum {
int a,b; // here a and b are instance variables so no need to be initialized. Both will have value 0 which is default
public static void main(String[] args) {
// int a = 0, b = 0; a and b are loca variables so both should be initialized
Scanner kb = new Scanner(System.in);
try {
a = kb.nextInt();
b = kb.nextInt();
int c = a / b;
System.out.println("Div=" + c);
} catch (ArithematicException e) {
System.out.println("Please Enter a non zero denominator");
} catch (InputMismatchException e) {
System.out.println("Please Enter integers only");
System.exit(0);
}
int d = a + b;
System.out.println("Sum=" + d);
}
}
答案 1 :(得分:1)
如果您没有初始化它们(即用int a=0,b=0;
替换int a,b;
),使用用户输入初始化它们的try块可能无法初始化它们(例如,如果user输入String而不是int,kb.nextInt()
将抛出异常)。
在这种情况下,他们不会在第int d=a+b;
行获得价值。因此必须对它们进行初始化。
答案 2 :(得分:0)
如果在 try-catch 中分配变量 a 出错,无论为什么,那么就永远不会被初始化,之后你将要进行数学运算未初始化的值,根本不是好的
因此是IDE中的编译..
尝试声明并初始化 a 和 b
int a, b;
a=0;
b=0;
try {
...