返回" int"来自用户输入

时间:2018-02-19 17:45:34

标签: java

我正在开发一个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();"在我的骰子方法。真的,我只是在寻找解释。我在教科书中查了一下,并在其他地方查找,但我找不到解释。

3 个答案:

答案 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()