对于以下代码,im得到一个错误InputMismatch异常,即使im提供了正确的输入


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class Person {
    public enum Sex {
        Male, Female
    }
    String Name;
    int Age;
    Sex Gender;
    String EmailAddress;
    public int getAge() {
        return Age;
    }
    static public Person getInstance() {
        return new Person();
    }
    public String getPerson() {
        return Name;
    }
}
public class TestPerson {
    public static void main(String...args) {
        List list = new ArrayList();
        list.add(Person.getInstance());
        list.add(Person.getInstance());
        Scanner s = new Scanner(System. in );
        for (int i = 0; i < 1; i++) {
            System.out.println(list.get(i).Name = s.nextLine());
            System.out.println(list.get(i).Age = s.nextInt());
        }
        s.close();
    }
}

像Eric爵士所说的那样使用泛型:

List<Person> = new ArrayList<Person>();

另外:当您在nextInt();之后使用nextLine();方法时,

nextLine();将在下一次迭代中将"n"作为其输入,因为nextInt();只取下一个整数令牌,而不取Enter Button ("n"),在code的情况下,CCD_6由下一个iterationnextLine();取用。

要么使用

  • 10而不是CCD_ 11

  • 只需使用nextLine();跳过"n",如下所示:

     public static void main(String...args) {
            List<Person> = new ArrayList<Person>();
            list.add(Person.getInstance());
            list.add(Person.getInstance());
            Scanner s = new Scanner(System. in );
            for (int i = 0; i < 1; i++) {
                System.out.println(list.get(i).Name = s.nextLine());
                System.out.println(list.get(i).Age = s.nextInt());
                s.nextLine(); //skips the "n" 
            }
            s.close();
        }
    

在声明列表时需要使用泛型。

List<Person> = new ArrayList<Person>();

现在编译器知道您打算用Person对象而不是常规的Objects来填充这个列表。在没有泛型的情况下,它假设列表将填充对象,这些对象没有NameAge作为变量,因此编译器会抱怨。

最新更新