Java-Java.util.InputMismatchException
我试图做的是允许用户输入名字和姓氏。用户可以输入一个没有问题的名字,但只要输入空格和姓氏,就会出现标题中提到的错误Java-Java.util.InputMismatchException,java,Java,我试图做的是允许用户输入名字和姓氏。用户可以输入一个没有问题的名字,但只要输入空格和姓氏,就会出现标题中提到的错误 public static void main(String args[]) { Scanner sc = new Scanner(System.in); int choice, String name, stuNum; do { System.out.
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
int choice,
String name, stuNum;
do
{
System.out.println("");
System.out.println("Student Grade System");
System.out.println("----------------------\n");
System.out.println(" 1) Enter student details");
System.out.println(" 2) Display student grades");
System.out.println(" 3) Display student statistics");
System.out.println(" 4) Display full transcript");
System.out.println(" 0) Exit System\n");
System.out.print("Select an option [0-4] >> ");
choice = sc.nextInt();
System.out.println("");
switch(choice)
{
case 1:
System.out.println("Entering Student Details");
System.out.println("------------------------");
System.out.print(" Student name: ");
name = sc.next(); //somewhere here it messes up
System.out.print(" Student number: ");
stuNum = sc.next();
}
}while(choice !=0);
}
这是我的代码的最低限度,因为我刚刚开始编写它,但这个问题阻碍了我进一步的工作。我已经尝试过使用sc.nextLine();将变量stuNum更改为int变量。两者都不起作用。它给出的完整错误如下所示:
java.util.InputMismatchException
位于java.util.Scanner.throwFor(Scanner.java:840)
下一步(Scanner.java:1461)
位于java.util.Scanner.nextInt(Scanner.java:2091)
位于java.util.Scanner.nextInt(Scanner.java:2050)
在Project.main(Project.java:40)
这是因为sc.next()
不会占用空间。因此,它将读取下一个标记(在本例中是空格后的姓氏),而不是输入的下一个标记。自己试试看:当你输入名字时,输入Firstname 1
,它会自动输入学号1。使用Scanner的nextLine()
方法消耗整行数据
您可以使用Integer.parseInt(sc.nextLine())解析int选项代码>使用next()只返回空格之前的内容。这意味着它不会占用空格。但是nextLine()在返回当前行后会自动向下移动扫描仪。
因此,只需将代码中的next()替换为nextline()。在获取学生姓名后,使用额外的nextline刷新扫描仪缓冲区
switch(choice)
{
case 1:
System.out.println("Entering Student Details");
System.out.println("------------------------");
System.out.print(" Student name: ");
name = sc.nextLine(); //somewhere here it messes up
sc.nextLine(); // to clean the enter key stored in the buffer
System.out.print(" Student number: ");
stuNum = sc.nextLine();
}
试试nextLine()而不是next(),我已经说过我已经试过了。不过,我会再试一次。你想把它放在哪里?在两个变量上?或者仅仅是名称变量?我刚刚在我的机器上测试了你的程序,没有发现任何错误(除了在选项的定义之后出现了一个“,”而不是;
。你确定你向我们展示了与你相同的版本吗?好的。我将name=sc.next();替换为name=sc.nextLine();我所做的只是在运行时将学生姓名:和学生编号:放在一行。@SlowpPowl我建议使用nextLine()
作为此类分步程序的任何输入。您可以根据任何数据类型解析该行。答案足够简单,效果非常好。谢谢。