Java Scanner util在请求用户提供电子邮件地址时引发异常

Java Scanner util在请求用户提供电子邮件地址时引发异常,java,java.util.scanner,Java,Java.util.scanner,我得为班级写一份花名册 作业要求您向程序输入自己的信息 为此,我在测试类中添加了一个scanner部分到一个新的Student对象(me)中,在该对象中它要求我提供所有构造函数参数 其中之一是电子邮件地址。我无法让它工作,因为每次我输入我的电子邮件地址时,我都会遇到一系列异常 以下是一个输出示例: What is your first name? Banning What is your last name? Lyth What is your email address? banninglyt

我得为班级写一份花名册

作业要求您向程序输入自己的信息

为此,我在测试类中添加了一个scanner部分到一个新的Student对象(me)中,在该对象中它要求我提供所有构造函数参数

其中之一是电子邮件地址。我无法让它工作,因为每次我输入我的电子邮件地址时,我都会遇到一系列异常

以下是一个输出示例:

What is your first name?
Banning
What is your last name?
Lyth
What is your email address?
banninglyth@live.com
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at StudentRosterBLYTH.StudentRosterTest.main(StudentRosterTest.java:68)
C:\Users\banni\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 14 seconds)
这是我所掌握的测试类。最后一部分是抛出错误

import java.util.ArrayList;
import java.util.Scanner;

/**
*
* @author banni
*/
public class StudentRosterTest {
    static int studentID;
    static String firstName
    static String lastName;
    static String emailAddress;
    static int age;
    static int[] grades;
    public static Scanner input = new Scanner(System. in );

    public static void main(String[] args) {

        ArrayList <Student> students = new ArrayList <Student> ();

        students.add(new Student(studentID, firstName, lastName, emailAddress, age));
        studentID = 1;
        firstName = "John";
        lastName = "Smith";
        emailAddress = "John1989@google.com";
        age = 20;

        students.add(new Student(studentID, firstName, lastName, emailAddress, age));
        studentID = 2;
        firstName = "Suzan";
        lastName = "Erickson";
        emailAddress = "Erickson_1990@gmail.com";
        age = 19;

        students.add(new Student(studentID, firstName, lastName, emailAddress, age));
        studentID = 3;
        firstName = "Jack";
        lastName = "Napol";
        emailAddress = "The_Lawyer99yahoo.com";
        age = 19;

        students.add(new Student(studentID, firstName, lastName, emailAddress, age));
        studentID = 4;
        firstName = "Erin";
        lastName = "Black";
        emailAddress = "Erin.black@comcast.net";
        age = 22;

        students.add(new Student(studentID, firstName, lastName, emailAddress, age));
        studentID = 5;
        //Begin asking for new Student entry
        firstName = input.next();
        System.out.println("What is your first name?");
        lastName = input.next();
        System.out.println("What is your last name?");
        emailAddress = input.next();
        System.out.println("What is your email address?");
        age = input.nextInt();
        System.out.println("How old are you?");

    }
}
import java.util.ArrayList;
导入java.util.Scanner;
/**
*
*@作者班尼
*/
公立班学生排班测试{
静态int-studentID;
静态字符串名
静态字符串lastName;
静态字符串地址;
静态智力;
静态int[]等级;
公共静态扫描仪输入=新扫描仪(System.in);
公共静态void main(字符串[]args){
ArrayList students=newArrayList();
添加(新学生(学生ID、名、姓、电子邮件地址、年龄));
studentID=1;
firstName=“约翰”;
lastName=“史密斯”;
电子邮件地址=”John1989@google.com";
年龄=20岁;
添加(新学生(学生ID、名、姓、电子邮件地址、年龄));
studentID=2;
firstName=“Suzan”;
lastName=“埃里克森”;
emailAddress=“埃里克森_1990@gmail.com";
年龄=19岁;
添加(新学生(学生ID、名、姓、电子邮件地址、年龄));
studentID=3;
firstName=“杰克”;
lastName=“Napol”;
emailAddress=“theu Lawyer99yahoo.com”;
年龄=19岁;
添加(新学生(学生ID、名、姓、电子邮件地址、年龄));
studentID=4;
firstName=“Erin”;
lastName=“黑色”;
emailAddress=“Erin。black@comcast.net";
年龄=22岁;
添加(新学生(学生ID、名、姓、电子邮件地址、年龄));
studentID=5;
//开始要求新学生入学
firstName=input.next();
System.out.println(“您的名字是什么?”);
lastName=input.next();
System.out.println(“你姓什么?”);
emailAddress=input.next();
System.out.println(“您的电子邮件地址是什么?”);
age=input.nextInt();
System.out.println(“你多大了?”);
}
}
所以,我想问大家,我做错了什么?是At标志还是我完全离开了

还有,有什么好处?我刚刚在一分钟前发布了这个,已经有了-rep?wat.png

您正在使用nextInt()请求电子邮件时,您的下一个呼叫将被一个关闭。您应该使用.nextLine()进行字符串输入,使用.nextInt()进行年龄输入


也许把“询问输入”和“打印问题”切换到。。。还有,请调试你的代码。你不认为你需要先问一个问题,然后才期待得到答案吗?@luk2302我刚刚试过,不仅问题的顺序不确定,而且错误仍然会发生,@PM77-1切换它们确实有帮助。。现在已经成功了。谢谢,出于某种原因,我是通过另一种方式学习的,但是Java比这更符合逻辑。哎呀。谢谢
studentID = 5;
//Begin asking for new Student entry
System.out.println("What is your first name?");
firstName = input.nextLine();
System.out.println("What is your last name?");
lastName = input.nextLine();
System.out.println("What is your email address?");
emailAddress = input.nextLine();
System.out.println("How old are you?");
age = input.nextInt();