0

ここにメニュークラスがあります

java.util.Scanner をインポートします。

public class Menu { private String[] menu_options;

public Menu(String[] menu_options) {
    this.menu_options = menu_options;
}

public int getUserInput() {
    int i = 1;
    for (String s : this.menu_options) {
        System.out.println(i + ". " + s);
        i++;
    }

    int selection = getint_input(menu_options.length);
    return (selection);
}

private int getint_input(int max) {
    boolean run = true;
    int selection = 0;

    while (run) {
        System.out.print("Select an option: ");
        Scanner in = new Scanner(System.in);


        if (in.hasNextInt()) {
            int value = in.nextInt();
            if(value>=1 || value<=max){
                selection = value; //fixed this now working
                run = false;    
            }

        } else {
            System.out
                    .print("Invalid input. Please enter a integer between 1 and "
                            + max + ": ");

        }
    }
    return selection;
}

}

そして、これが私が使用していたメニュードライバーです

public class Menutester {

public static void main(String[] args) {
    String[] menuitems = new String[2];
    menuitems[0] = "option one";
    menuitems[1] = "option two";
    Menu tm = new Menu(menuitems);
    int choice  = tm.getUserInput();
    System.out.println("Got input");
}

}

初めて何かを入力すると、まったく登録されず、Eclipseでデバッグしようとすると、最初の入力でエラー FileNotFoundException(Throwable).(String) line: 195 が表示されます。

これはそれが返すものです

  1. オプション 1
  2. オプション2 オプションを選択してください: 1(私はこれを入力してエンターを押しました) 1(ここで入力を登録しただけで同じです) 入力しました
4

2 に答える 2

4

nextInt入力を読み取り、バッファから削除します。値を保存せずにそのように呼び出すことはできません。

一度呼び出して値を保存し、必要なすべてのチェックを行います。

これを変える:

if (in.hasNextInt() && in.nextInt() >= 1 || in.nextInt() <= max) {
            selection = in.nextInt();
//...

このため:

if(in.hasNextInt()) {
   int selection = in.nextInt();
   if(selection >= 1 || selection <= max) {
       run = false;
   }
}
于 2013-02-01T02:29:20.340 に答える
1

交換:

   if (in.hasNextInt() && in.nextInt() >= 1 || in.nextInt() <= max) {
        selection = in.nextInt();
        run = false;
        System.out.println(run);

    }

なので:

int input = in.nextInt();
if (input  >= 1 || input  <= max) {
    selection = in.nextInt();
    run = false;
    System.out.println(run);
}

もう一度試してください。

于 2013-02-01T02:39:30.447 に答える