【发布时间】:2018-02-19 17:45:34
【问题描述】:
我正在用 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;
}
}
该方法提供了我的输入行并要求用户输入字符串作为名称。这工作得很好,它会按预期打印出来。但是当它继续调用 dice 方法时,我在“dice();”处得到一个“InputMismatchException”。在 main 和 "int dice = input.nextInt();"在我的骰子方法中。真的,我只是在寻找一个解释。我在我的教科书中查过,在其他地方也查过,但找不到解释。
【问题讨论】:
-
在此行之后拨打
input.nextLine():int dice = input.nextInt(); -
或者你也可以这样做
Scanner input = new Scanner(System.in).useDelimiter("\\s+");它将忽略标记之间的任何空白(包括换行符)。 -
我的错,那行是在
name()方法中的input.next之后...(并且您应该为您的方法使用更好的名称,因为name()听起来更像是一个变量而不是一个方法,方法名称应以动词开头)。每当您调用next()时,Scanner类仍在等待另一个从未读取的参数,因为它希望它位于同一行。当您添加该行input.nextLine()时,您明确告诉Scanner在按下Enter后读取下一行中的下一个标记
标签: java