有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数组我的循环中有一个错误。线程“main”java中出现异常。util。非接触性异常。错误是我的扫描仪?

好的,看来我的主课遇到了一些问题。它在第二次运行时中断我的循环,并显示和错误。它说我的扫描仪从菜单中读取用户选择是创建错误?这是怎么回事,它在第一个循环中工作,但由于某种原因,它无法再次运行

"action = new Scanner(System.in).nextInt();" 

正在生成错误。有人知道为什么会发生这种情况吗?因为在用户选择菜单选项时,读取用户输入的整数非常重要

import java.util.Scanner; 
import java.io.FileWriter; 
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.String; 
import java.lang.System;  

public class MainActions {

    public static void main(String args[]) throws IOException {

        int action = 0;

        while (action != 6) {

            Contact.menu();

            new Scanner(System.in);

            action = new Scanner(System.in).nextInt();

            if (action <= 0 || action > 6) {
                System.out.println("Invalid selection. ");
            }

            switch (action) {
            case 1:
                MainActions.addContactInfo();
                break;

            case 2:
                break;

            case 3:
                break;

            case 4:
                break;

            case 5:
                break;
            }
        }
    }

    public static void addContactInfo() {

        Contact contact;
        contact = new Contact();

        Scanner reader = new Scanner(System.in);
        System.out.println("Enter Contact Last Name:");
        String lastname = reader.nextLine();
        contact.setLastName(lastname);
        System.out.println("Enter Contact First Name: ");
        contact.setFirstName(reader.nextLine());
        System.out.println("Enter Contact Street Address: ");
        contact.setHouseAddress(reader.nextLine());
        System.out.println("Enter Contact City: ");
        contact.setCity(reader.nextLine());
        System.out.println("Enter Contact Zip Code: ");
        contact.setZip(reader.nextLine());
        System.out.println("Enter Contact Email: ");
        contact.setEmail(reader.nextLine());
        System.out.println("Enter Contact Phone Number: ");
        contact.setPhone(reader.nextLine());
        System.out.println("Enter Contact Notes: ");
        contact.setNotes(reader.nextLine());

        if (lastname.trim().equals("")) {
            System.out.println("\nLast name was blank, contact not saved.");
            System.exit(0);
        } else {
            ContactList list;
            list = new ContactList();
            list.add(contact);
            list.save();
            Contact c = contact;
            try (PrintWriter output = new PrintWriter(new FileWriter("contactlist.csv", true))) {
                output.printf("%s\r\n", c);
            } catch (Exception e) {}
        }
        reader.close();
    }
}

控制台:

1. Enter a new person
2. Print the contact list
3. Retrieve a person's information by last name
4. Retrieve a person's information by email address
5. Retrieve all people who live in a given zip code
6. Exit
1
Enter Contact Last Name:
asdf
Enter Contact First Name: 
asdf
Enter Contact Street Address: 
asdf
Enter Contact City: 
asdf
Enter Contact Zip Code: 
asdf
Enter Contact Email: 
asdf
Enter Contact Phone Number: 
asdf
Enter Contact Notes: 
asdf

Contact information has been saved.

Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at MainActions.main(MainActions.java:33)
1. Enter a new person
2. Print the contact list
3. Retrieve a person's information by last name
4. Retrieve a person's information by email address
5. Retrieve all people who live in a given zip code
6. Exit

共 (2) 个答案

  1. # 1 楼答案

    new Scanner(System.in); // Remove this. Not needed.
    action = new Scanner(System.in).nextInt();
    

    等等,这不是问题所在。这是实际问题

    reader.close();
    

    你的addContactInfo()中的这一行是罪魁祸首。删除此项,您的代码将正常工作

    reader.close()关闭方法中的Scanner(扫描System.in),因为两者都在扫描System.in

    希望这能解决你的问题。我只是碰巧找到了this question on SO。更多详细的解释,请查看这个

    医生说:

    公共作废关闭()引发IOException

    Closes this input stream and releases any system resources associated with this stream. The general contract of close is that it closes the input stream. A closed stream cannot perform input operations and cannot be reopened.

  2. # 2 楼答案

    替换

    new Scanner(System.in);
    
    action = new Scanner(System.in).nextInt();
    

    Scanner scan = new Scanner(System.in);
    
    action = scan.nextInt();