我正在开发一个java程序中的骰子游戏(特别是jGRASP),它正在踢我的罐头。我需要从用户输入返回一个名字和每手骰子的数量。到目前为止,这是我的(相关)代码:
import java.util.*;
public class DiceGame {
public static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("Welcom to the Lab 7 Dice Game.");
name();
dice();
}
public static String name(){
System.out.print("What is you name? ");
String name = input.next();
return name;
}
public static int dice(){
System.out.print("How many rolls per round? ");
int dice = input.nextInt();
return dice;
}
}
该方法给出了我的输入行,并要求用户输入一个String作为名称。这很好用,它会按预期打印出来。但是当它继续调用骰子方法时,我得到一个" InputMismatchException" at" dice();"在main和at" int dice = input.nextInt();"在我的骰子方法。真的,我只是在寻找解释。我在教科书中查了一下,并在其他地方查找,但我找不到解释。
答案 0 :(得分:1)
遗憾的是,我没有足够的声誉评论,所以我必须回答。基本上,您提供的代码本质上没有任何错误。我很好奇你提供的答案是“每轮多少卷?”题。
如果您提供类似“一个”的答案,则会将其作为String
类型而非int
类型,并生成您所看到的InputMismatchException
。如果您只是1
提供答案,那么您应该没问题。
答案 1 :(得分:0)
从我的问题可以看出,这是因为Scanner
不直观。你似乎在说它不等第二次输入。如果情况并非如此,那么这个答案就没有用了。
next()
方法接受下一个以空格分隔的字符串,这意味着如果键入
I want all these words
它将接收I
,缓冲区位于want all these words
前面。因此,当您调用nextInt()
时,它会接收下一个输入,即want
,而不是int。
所以,请使用nextLine()
代替next()
,除非您真的只想要下一个字,并在nextLine()
之后调用nextInt()
强制Scanner
消费换行符。
import java.util.*;
public class DiceGame {
public static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("Welcome to the Lab 7 Dice Game.");
name();
dice();
}
public static String name(){
System.out.print("What is your name? ");
String name = input.nextLine();
return name;
}
public static int dice(){
System.out.print("How many rolls per round? ");
int dice = input.nextInt();
input.nextLine();
return dice;
}
}
答案 2 :(得分:0)
骰子方法期望返回一个int值。当您在第34行之后输入一个值时;每轮有多少个角色?"打印确保您输入的是int而不是其他类型。例如,值1,2,3是您的代码期望的不是一,二,三。
或者尝试用input.nextLine()
替换input.nextInt()