Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-Java.util.InputMismatchException_Java - Fatal编程技术网

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()
作为此类分步程序的任何输入。您可以根据任何数据类型解析该行。答案足够简单,效果非常好。谢谢。