2
public static void operation() {
    try {
        Scanner input = new Scanner(System.in);
        String choiceString = "";
        char choice = 'a';
        System.out.print("Enter letter of choice: ");
        choiceString = input.next();
        if (choiceString.length() == 1) {
            choice = choiceString.charAt(0);
            System.out.println("-------------------------------------------");

        switch(choice) {
            case 'a': {
                ....
                break;  
            }
            case 'b': {
                ....    
            }
            default:
                throw new StringException("Invalid choice...");
        }
        }else {
            throw new StringException("Invalid input...");
        }
    } catch(StringException i) {
        System.out.println("You typed " + choiceString + i);
    }

プログラムがユーザーに任意の文字を入力するように求め、ユーザーが単語または数字を入力すると、例外をキャッチする必要があります。次の出力が表示されます。

You typed: ashdjdj
StringException: Invalid input...

ここでの問題は、変数 ChoiceString が見つからないことです。これを修正するにはどうすればよいですか?

4

5 に答える 5

2

これは、try ブロック内で変数を宣言したため、try ブロックの外で宣言したためです。

于 2013-01-12T07:06:15.750 に答える
1

問題は、try ブロックで宣言された変数のスコープが、対応する catch ブロックから見えないことです。コンパイル エラーを修正するには、次のように変数を try の外で宣言します。

public static void operation() {
    String choiceString = "";
    try {
        ...
    } catch(StringException i) {
        System.out.println("You typed " + choiceString + i);
    }
}
于 2013-01-12T07:07:41.147 に答える
1

try catch ブロックの外側で ChoiceString を宣言すると、問題が解決するはずです

于 2013-01-12T07:08:24.360 に答える
1

choiceString は try ブロックで宣言されているため、そのスコープに対してローカルです。chooseString を try-catch ブロックの外側に移動して、catch ブロックのスコープで使用できるようにすることができます。

String choiceString = "";
try {
  //  omitted for brevity
} catch(StringException i) {
  System.out.println("You typed " + choiceString + i);
}
于 2013-01-12T07:08:25.597 に答える
1

次のように、choiceString を try ブロックの外に移動します。

String choiceString = "";
        try {
            Scanner input = new Scanner(System.in);
........
于 2013-01-12T07:38:06.957 に答える