0

ユーザーが入力した各文字列を文字列配列に割り当てようとしています。全体がforループ内にあり、配列のインデックスによって評価されます。私のコードは次のとおりです。

String skillAssign[] = new String[100];

    for (int i=0; isDone == false; i++)
    {
        System.out.println(skillAssign[i]);
        System.out.println(i);
        skillAssign[i] = keyboard.nextLine();
        if ((!(skillAssign[i].equalsIgnoreCase("stats"))) && (!(skillAssign[i].equalsIgnoreCase("done"))))
        {
            assignmentValue = keyboard.nextInt();
            if (((skillAssign[i].equalsIgnoreCase("health"))) && (skillPoints - assignmentValue >=0))
            {
                System.out.println("Added " + assignmentValue + " points to Health!");
                skillPoints = (skillPoints - assignmentValue);
                newMaxHealth = (assignmentValue + newMaxHealth);
            }
        //code that evaluates the string located inside the skillAssign[i] for other stats
    }

最初の文字列は正しく評価されますが、2 番目の文字列を入力しようとすると、java.util.InputMisMatchException が発生します。ユーザーが入力した配列の各インデックスに文字列を割り当てて評価するようにするにはどうすればよいですか? (評価部分は頂いたと思いますが)

投稿を関連するコードに限定しようとしたため、isDone などは省略されていますが、 isDone が入力されたときに true に変更され、スキルポイントを除く他のすべての変数が 0 に設定されてdoneキーボードが構築されます。Scanner keyboard = new Scanner

4

2 に答える 2

2

上記のコードをテストしたところ、次のようになりました。

  • ループに入ります。
  • 最初の文字列を入力するよう求められます ( を介してkeyboard.nextLine())。「健康」と入力しました。
  • 整数を入力するよう求められます ( からkeyboard.nextInt())。「 40 」と入力しました。
  • 再びループに入ります。
  • 整数を入力するよう求められます ( からkeyboard.nextInt())。
  • ...

2 番目の文字列を入力するように求められるのではなく、即座に整数を入力するように求められるようです。

理由はわかりませんが、次がスキップされるnextInt()原因のようです。nextLine()

交換してもいいかもしれません

assignmentValue = keyboard.nextInt();

try {
    assignmentValue = Integer.parseInt(keyboard.nextLine());
}
catch (NumberFormatException exc) {
    throw new InputMismatchException(exc.getMessage());
}

編集後がスキップされる理由について簡単に言及しているStackOverflow に関する投稿
を見ました。nextLine()nextInt()

于 2013-10-12T18:36:04.670 に答える