我继续在我的代码中得到错误“java.util.InputMismatchException”

时间:2014-10-18 18:50:07

标签: java

我一直在为这个项目编写代码而且我一直收到错误“java.util.InputMismatchException”。我搜索并发现了类似的问题,但我不知道答案如何适用于我的代码。我知道我正确地输入输入以便输出。此外,我一直在尝试重新格式化我的代码,但它似乎让它变得更糟。我很抱歉,如果这显然是明显的,我不认识它,我刚刚开始编码。谢谢你的耐心等待。

以下是完整的错误消息:

Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at songBottlesOfBeer.BottlesOfBeer.main(BottlesOfBeer.java:47)

这是我的完整代码:

package songBottlesOfBeer;

import java.util.Scanner;

public class BottlesOfBeer {

        private static Scanner bottles;
            public static void number(int n) {

                if (n>1) {
                    System.out.print(n+" bottles of beer on the wall, "+
                            n+" bottles of beer, ya' take one down, "+
                            "ya' pass it around, ");
                    n=n-1 ;
                    System.out.println(n+" bottles of beer on the wall.");
                    number(n);
                }else{

                    if(n==1) {
                        System.out.print(n+" bottle of beer on the wall, "+
                                n+" bottle of beer, ya' take one down, "+
                                "ya' pass it around, ");
                                n=n-1 ;
                        System.out.println(n +" bottles of beer on the wall.");
                        number(n);
                    }else{
                        System.out.println("No more bottles of beer on the wall, " +
                                "no bottles of beer, ya' can't take one down, "
                                + "ya' can't pass it around, 'cause there are"
                                + " no more bottles of beer on the wall!");
                            }

                        }
                }

            public static void main(String[] args) {
                bottles = new Scanner(System.in);
                bottles.useDelimiter("\n");

                System.out.println("Enter the starting number of " 
                        + "bottles in the song "
                        + "'99 Bottles of Beer on the Wall':");
                number(bottles.nextInt());
                }
}

错误位于数字(bottles.nextInt());

2 个答案:

答案 0 :(得分:1)

我尝试了你的代码并且它完美运行..

这个例外只是意味着你已经输入了一些内容(我不知道是什么),但它不是Integer,它应该被读取。

这是我写5:

时得到的输出
  

在歌曲'99 Bottles of Beer中输入瓶子的起始数量   在墙上':墙上有5瓶啤酒,5瓶啤酒,雅'   拿下一个,你把它传过来,墙上挂着4瓶啤酒。 4   墙上的啤酒瓶,4瓶啤酒,你拿一个,雅'   传递它,墙上有3瓶啤酒。 3瓶啤酒   墙上,3瓶啤酒,你拿下一个,雅'绕过它,2   瓶啤酒在墙上。墙上装2瓶啤酒,2瓶   啤酒,你拿一个,你把它传递,1瓶啤酒   墙。墙上有1瓶啤酒,1瓶啤酒,你拿一瓶啤酒   下来,你把它传过来,墙上挂着0瓶啤酒。不再   墙上挂着一瓶啤酒,没有一瓶啤酒,雅'不能拿一个   下来,你不能传递它,因为没有更多的瓶子了   啤酒在墙上!

答案 1 :(得分:1)

删除行

bottles.useDelimiter("\n");

首先,请避免使用\n作为行分隔符,因为它取决于操作系统。如果在正则表达式中,请使用System.lineSeparator()\R。其次,分隔符用于将单个输入标记(中断)到几个部分,这不是您需要的。按 Enter 会自动提交单个输入。

示例

    Scanner bottles = new Scanner(System.in);
    System.out.println(bottles.nextInt());
    System.out.println(bottles.nextInt());
    System.out.println(bottles.nextInt());

第一个调用将阻止执行等待输入。输入由默认分隔符标记,即\p{javaWhitespace}+(基本上是空格)。让我们看一下以下情况:

输入:1 2 3 输入

输出:

1
2
3

这是因为单个5字符输入被标记为3个段,然后由nextInt方法按顺序调用。

输入1 2 输入

输出:

1
2
//cursor mark

这种情况发生的原因是你对nextInt的前两次调用“饱和”,但是第三次​​没有找到另一个整数,因此它会提示用户输入(并阻止执行)。

输入:1 2 3 4 输入

输出:

1
2
3

与第一种情况一样,只有扫描仪存储输入4,下一次调用才会使用它。

请记得在完成后关闭扫描仪

bottles.close();