我一直在为这个项目编写代码而且我一直收到错误“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());
答案 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();