为什么我必须在这个程序中初始化a和b?

时间:2016-03-23 06:53:29

标签: java scope

在此计划中,为什么我必须初始化ab,因为它们的范围不受限制,但我无法在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);}}

3 个答案:

答案 0 :(得分:2)

如果您在谈论int a=0,b=0;,那么ab都是局部变量,局部变量必须初始化

只需要初始化类级别和实例级别变量

如果您不想初始化,请参阅下面的代码

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 {
...