尝试... catch块没有定义变量

时间:2012-06-28 11:24:16

标签: java try-catch

我有一个程序,它接受来自args[]数组的参数,在main方法中定义,但是在未定义的情况下有一个备份,以try ... catch块的形式,如果抛出ArrayIndexOutOfBounds异常,则使用名为getInt的方法来提示用户输入变量。但是,出于某种原因,当我尝试使用该变量时,我的编译器说它无法找到它。我有以下代码:

try {
    int limit = Integer.parseInt(args[0]);
}
catch(ArrayIndexOutOfBoundsException e) {
    int limit = getInt("Limit? ");
}
int[] p = getPrimes(limit);

getPrimes是我的另一种方法,它返回一个从2开始到最大指定数的素数数组(使用Atkin的Sieve)。无论如何,当我写int[] p = getPrimes(limit);并尝试编译时,它表示没有定义“限制”变量。求救!

4 个答案:

答案 0 :(得分:8)

你应该在街区外宣布:

int limit;
try {
    limit = Integer.parseInt(stuff[0]);
}
catch(ArrayIndexOutOfBoundsException e) {
    limit = getInt("Limit? ");
}
int[] p = getPrimes(limit);

答案 1 :(得分:2)

在catch块之外声明limit,目前它位于catch块catch{}的范围内

答案 2 :(得分:2)

int limit;
try {
    limit = Integer.parseInt(stuff[0]);
}
catch(ArrayIndexOutOfBoundsException e) {
    limit = getInt("Limit? ");
}
int[] p = getPrimes(limit);

在您的程序中,您在try块中创建了2个本地限制变量,在catch块中创建了另一个。

在try块

之外声明它

答案 3 :(得分:1)

在try / catch块之外定义限制变量,您无权访问try block outside中定义的变量。如果你在try块之外调用它,你也必须初始化它,就像你的情况一样。