Java NoTouchElementException中的错误

Java NoTouchElementException中的错误,java,oracle,nosuchelementexception,Java,Oracle,Nosuchelementexception,有人能帮我一下吗:我有以下错误: Exception in thread "main" java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:862) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt(Scanner.java:2117) at java.util.Scanner.nextInt(Sca

有人能帮我一下吗:我有以下错误:

Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
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 I6Exc2.menuSelection(I6Exc2.java:28)
at I6Exc2.PersonsWrite(I6Exc2.java:120)
at I6Exc2.menuSelection(I6Exc2.java:43)
at I6Exc2.main(I6Exc2.java:19)
当我的第一个输入是3时会发生这种情况,而下一个输入是5。看起来我关扫描仪的时候做错了什么?有人能帮我吗? 非常感谢

public class Abc {   
public static Person[] names;
public static void main(String[] args) {
    menuSelection();
}

public static void menuSelection() {

    Scanner s = new Scanner(System.in);
    System.out.println( "Choose menu item:" + "\n" + "1. Read File"
            + "\n" + "2. Creates nr objects" + "\n" + "3. Write a File"
            + "\n" + "4. Display nr objects" + "\n" + "5. Exit");
    int menuSelection = s.nextInt();

    switch (menuSelection) {
    case 1: System.out.println("Input a name");
    String filePerson = s.next();
    PersonRead(filePerson);
    break;

    case 2: System.out.println("Input nbr of obj");
    int p = s.nextInt();
    PersonsCreate(p);
    break;

    case 3: System.out.println("Input a name");
    String filePersonWrite = s.next();
    PersonWrite(names, filePersonWrite);
    break;

    case 4: PersonsDisplay(names);
    break;

    case 5: System.out.println("Good Bye!");
    s.close();
    break;

    default: System.out.println("Invalid choice");
    menuSelection();
    break;
    }
}

public static Person[] PersonRead (String filePerson) {

    Person[] names2 = names;

    try (FileInputStream fi = new FileInputStream(filePerson)) {

        ObjectInputStream os = new ObjectInputStream(fi);

        names2 = (Person[])os.readObject();

        os.close();

    } catch (IOException e) {
        System.out.println("Person file not found.");
        System.out.println(e.getMessage());

    } catch (ClassNotFoundException e) {
        System.out.println("File " + filePerson + " does not contains valid Person object");
    }

    names = names2;
    if (names != null) {
        System.out.println("p Person read successfully from file " + filePerson);
    }
    menuSelection();
    return names;
}   

public static Person[] PersonsCreate(int p) {

    names = new Person[p];
    for(int i=0; i < p; i++) {
        names[i] = new Person("Mr. Tim" + i, 20 + i, 'M');
    }

    menuSelection();
    return names;
}

public static void PersonWrite (Person[] Person, String filePerson) {

    if (names != null) {

    try (FileOutputStream fs = new FileOutputStream(filePerson)) {

        ObjectOutputStream os = new ObjectOutputStream(fs);

        os.writeObject(names);

        os.close();

    } catch (IOException e) {
        e.printStackTrace();
        }
    System.out.println("p Person written successfully to " + filePerson);

    } else {
        System.out.println("Nothing to write.");
    }

    menuSelection();
}

public static void PersonsDisplay(Person[] Person) {

    for(Person names: Person) {
        System.out.println(names);
    }
    menuSelection();
}
}
如果没有更多可用的令牌,则由下一个Telement抛出NoTouchElementException

使用hasNextInt进行检查


非常感谢。我更改了以前尝试过的代码:但出现了一个新错误:java.util.regex.Pattern$Node.studyPattern.java:3417在java.util.regex.Pattern$Node.studyPattern.java:3417在java.util.regex.Pattern$Branch.studyPattern.java:4631在java.util.regex.Pattern$Node.studyPattern.java:3417在java.util.regex.Pattern$Node.studyPattern.java:3417您有解决方案吗?@user5424264我认为它在无限循环中运行,导致StackOverflower错误,请现在调试,即使我调试时也无法找出问题所在。您能从Abj.java代码中发布StackOverflower错误的起点吗?我通过将switch语句放在if hasnext语句中修复了它。谢谢大家的帮助!
if(input.hasNextInt() ){
  int p = s.nextInt();
}