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
    }

第一个字符串计算正确,但是当我输入第二个字符串时,我得到 java.util.InputMisMatchException。我怎样才能得到它,以便它为用户输入的数组的每个索引分配一个字符串,然后评估它?(我想我得到了评估部分)

我试图将帖子限制为相关代码,因此省略了 isDone 之类的内容,但是当done键入时 isDone 更改为 true 并且构造键盘时Scanner keyboard = new Scanner所有其他变量都设置为 0,除了 SkillPoints

4

2 回答 2

2

我已经测试了上述代码,结果如下:

  • 我们进入循环。
  • 要求您输入第一个字符串(通过keyboard.nextLine())。我输入了“健康”。
  • 要求您输入一个整数(通过keyboard.nextInt())。我输入了“ 40 ”。
  • 我们重新进入循环。
  • 要求您输入一个整数(通过keyboard.nextInt())。
  • ...

似乎没有要求我输入第二个字符串,而是立即输入整数。

我不知道为什么会这样,但看起来nextInt()会导致下一个nextLine()被跳过。

也许你可以更换

assignmentValue = keyboard.nextInt();

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

编辑我在 StackOverflow 上
看到了一篇文章,其中简要提到了为什么after被跳过。nextLine()nextInt()

于 2013-10-12T18:36:04.670 回答
1

我相信这更接近你的意图。这样,nextLine 抓取的对键盘输入的引用不会在每次迭代中丢失,而是保留在新的 String 实例中。正确的?

System.out.println(i);
String getMe = keyboard.nextLine();
skillAssign[i] = new String(getMe);
System.out.println(skillAssign[i]);
于 2013-10-12T18:02:58.757 回答