1

メインメソッドで定義された配列からパラメーターを取得するプログラムがありますがargs[]、定義されていない場合に備えて、ArrayIndexOutOfBounds例外がスローされた場合に try...catch ブロックの形式でバックアップがありますではなく、呼び出さgetIntれたメソッドを使用して、ユーザーに変数の入力を求めるプロンプトを表示します。しかし、何らかの理由で、その変数を使用しようとすると、コンパイラはそれが見つからないと言います。次のコードがあります。

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

getPrimes私が持っている別の方法は、2から始まり、指定された数までの素数の配列を返します(アトキンのふるいを使用)。とにかく、書いint[] p = getPrimes(limit);てコンパイルしようとすると、「制限」変数が定義されていないと表示されます。助けてください!

4

4 に答える 4

8

ブロックの外で宣言する必要があります。

int limit;
try {
    limit = Integer.parseInt(stuff[0]);
}
catch(ArrayIndexOutOfBoundsException e) {
    limit = getInt("Limit? ");
}
int[] p = getPrimes(limit);
于 2012-06-28T11:25:32.197 に答える
2

キャッチブロックの外側で宣言しlimitます。現在、キャッチブロックの範囲内にあります。catch{}

于 2012-06-28T11:25:47.257 に答える
2
int limit;
try {
    limit = Integer.parseInt(stuff[0]);
}
catch(ArrayIndexOutOfBoundsException e) {
    limit = getInt("Limit? ");
}
int[] p = getPrimes(limit);

あなたのプログラムでは、ブロック内に 1 つ、tryブロック内にもう1 つ、2 つのローカル Limit 変数を作成しましたcatch

try ブロックの外で宣言する

于 2012-06-28T11:27:16.717 に答える
1

try/catch ブロックの外側で制限変数を定義します。try ブロックの外側で定義された変数にアクセスすることはできません。ここの場合のように、try ブロックの外で呼び出す場合も、初期化する必要があります。

于 2012-06-28T11:27:50.810 に答える