我有一个程序,它接受来自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);
并尝试编译时,它表示没有定义“限制”变量。求救!
答案 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块之外调用它,你也必须初始化它,就像你的情况一样。