0
import java.util.Scanner;
import java.util.InputMismatchException;
public class Demo
{
    public static void main(String [] agrs){
    Scanner keyBoard = new Scanner(System.in);
    int input;
    do{
        System.out.println("[ 1] Case 1.");
        System.out.println("[ 2] Case 2.");
        System.out.println("[ 3] Case 3.");
        System.out.println("[ 0] Case 0.");
        System.out.print("Your Choice: ");

        try{
            input = keyBoard.nextInt();
        }
        catch(InputMismatchException e){
            System.out.println("Error");
        }

        switch (input){
            default:
                  System.out.println("Default");
                  break;
            case 1:
                  System.out.println("One");
                  keyBoard.next();
                  break;
            case 2:
                  System.out.println("Two");
                  break;
            case 3:
                  System.out.println("Three");
                  break;
            case 0:
                  System.exit(0);
                  break;
        }
    }
    while(input != 0);
}

コンソールにメニューを作りたいのですが、エラーが発生しました。エラー: 変数入力が初期化されていない可能性があります。エラーが発生する理由はわかっていますが、修正方法がわかりません。私は少し英語を知っているだけなので、mod edit 私のトピックがもっと合うようになると思います。

4

6 に答える 6

2

これにより、無限ループと無効な入力の問題、およびコンパイラ エラーが修正されます。

import java.util.Scanner;
import java.util.InputMismatchException;

public class Demo {

    public static void main(String[] agrs) {

        Scanner keyBoard = new Scanner(System.in);
        // This fixes the compiler error!
        int input = -1;

        do {
            System.out.println("[ 1] Case 1.");
            System.out.println("[ 2] Case 2.");
            System.out.println("[ 3] Case 3.");
            System.out.println("[ 0] Case 0.");
            System.out.print("Your Choice: ");

            try {
                input = keyBoard.nextInt();
            } catch (InputMismatchException e) {
                // This fixes the endless loops on invalid inputs!
                System.out.println("Invalid input " + keyBoard.next());
                input = -1;
            }

            switch (input) {
                default:
                    System.out.println("Default");
                    break;
                case 1:
                    System.out.println("One");
                    keyBoard.next();
                    break;
                case 2:
                    System.out.println("Two");
                    break;
                case 3:
                    System.out.println("Three");
                    break;
                case 0:
                    System.exit(0);
                    break;
            }
        } while (input != 0);
    }
}
于 2013-03-24T04:51:18.233 に答える
0

入力が実際に割り当てられる前に、「keyBoard.nextInt()」から例外がスローされる可能性があります。その場合は、以下の switch ステートメントで何が起こるかを考えてみてください...さらに悪いことに、do-while ループから抜け出すにはどうすればよいでしょうか。

于 2013-03-24T04:48:56.040 に答える
0

int 入力を 0 または任意の値で初期化します。変数入力を使用する前にユーザーから入力を取得するためです。

int input=0;

それはあなたの問題を解決します。

于 2013-03-24T04:52:37.743 に答える
0

これで修正されるはずです。

int input = 0;

于 2013-03-24T04:52:48.707 に答える
0

変数は、使用する前に初期化する必要があります。

int input;

この変数をダミー値で初期化できます。

int input = -1;
于 2013-03-24T04:53:03.340 に答える
0

入力変数をデフォルト値に初期化する必要があります。これはローカル変数であり、デフォルトではローカル変数は初期化されません。したがって、それらにデフォルト値を明示的に割り当てる必要があります。

これをチェックしてください:

        int input;
    do{
      // Some statements
        try {
            input = keyBoard.nextInt();
        } catch(InputMismatchException e) {
            System.out.println("Error");
        }
        // What if the above try-catch block is bypassed. In that case input will not have any value assigned to it. 
        // Hence, you get the error
        switch (input){

したがって、最初のステートメントを次のように変更します。

int input = -1;
于 2013-03-24T05:03:53.563 に答える