当前位置: 首页 > 知识库问答 >
问题:

线程"main"中的异常 java.util. Java中的NoSuchElementException

公羊浩气
2023-03-14

此错误似乎是一个非常普遍的问题。我已经查找了其他询问此问题并尝试实施其解决方案的堆栈溢出帖子,但我仍然收到相同的错误。完整的错误是:

Exception in thread "main" java.util.NoSuchElementException
        at java.base/java.util.Scanner.throwFor(Scanner.java:937)
        at java.base/java.util.Scanner.next(Scanner.java:1594)
        at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
        at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
        at src.file.main(file.java:29)

我确信我缺少了一些非常简单的东西,但我无法找到它,因为当我通读代码时,逻辑似乎很好。这是我的文件:

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

        int choice = 0;
Scanner myVal = new Scanner(System.in);

        while(choice != 3) {

            System.out.println("1. enter info \n2. print info \n3.exit");

            

            System.out.println("Enter a choice: ");
            choice = myVal.nextInt(); //Line 29

            if(choice == 1) {
                enterInfo();
            }
            else if(choice == 2) {
                print();
            }
            else if(choice == 3) {
                System.exit(0);
            }
        }
    }

    static ArrayList<newType> studInfo = new ArrayList<src.newType>();

    static void enterInfo() {

        Scanner keyboard = new Scanner(System.in);

            System.out.println("Enter the information (Program year average lastname): ");
            String info = keyboard.nextLine().trim();
            if(info.isEmpty()) {
                System.out.println("Error, no input was made.");
                keyboard.close();
                return;
            }
            String[] tokens = info.split(" ");
            int size = tokens.length;
            String prgm = tokens[0];
            int yr = Integer.parseInt(tokens[1]);

            String lastname = tokens[3];
            Double avg = Double.parseDouble(tokens[2]);
            newType inf = new newType(prgm, yr, avg, lastname);
            studInfo.add(inf);
            System.out.println("Information added.");
            keyboard.close();
        return;
    }

示例输入:math 5 76 Smith,此信息被添加到<code>newType</code>类型的数组列表中,可以在其中打印,也可以添加其他配置文件。

程序编译没有错误或警告,我可以成功运行程序。当我选择选项1时,我以正确的格式输入所有信息,我得到了添加信息的消息,表明这是一个成功的过程。在这条消息之后,出现了异常。这让我相信错误实际上并不像我最初想的那样存在于我的entInfo函数中,而是当它第二次到达第29行时。我不知道如何修复这个错误,有人能帮忙吗?提前感谢!

共有1个答案

戎志勇
2023-03-14

除了在使用Scanner时犯的错误之外,Java中遵循的标准也缺失。

  1. 类名应该以大写字母开头(文件应该为文件,与newType相同。它应该是新类型)
  2. 如果您要命名任何类,那么它应该是一个名词,因此应该根据程序中要实现的目标命名,例如 AddingNumbers、ReverseNumbers。

请参考为什么我们不应该在一个程序中使用多个扫描仪:为什么关闭扫描仪似乎会破坏新的扫描仪?

我对你的代码做了一些改动。希望这个有用!!!

//修改代码

    public class File {
        
        static Scanner myVal = new Scanner(System.in);   // Use this scanner throughout the program
        static ArrayList<newType> studInfo = new ArrayList<src.newType>();
    
        public static void main(String[] args) throws IOException {
    
            int choice = 0;
    
            while (choice != 3) {
    
                System.out.println("1. enter info \n2. print info \n3.exit");
    
                System.out.println("Enter a choice: ");
                choice = myVal.nextInt(); // Line 29
    
                if (choice == 1) {
                    enterInfo();
                } else if (choice == 2) {
                    // print();
                } else if (choice == 3) {
                    System.exit(0);
                }
                
            }
            myVal.close();    // Can be closed once the need is over.
        }           
    
        static void enterInfo() {
    
    //      Scanner keyboard = new Scanner(System.in);    No need of multiple scanners.
    
            System.out.println("Enter the information (Program year average lastname): ");
            String info = myVal.nextLine().trim();
            if (info.isEmpty()) {
                System.out.println("Error, no input was made.");
    //          keyboard.close();
                return;
            }
            String[] tokens = info.split(" ");
            int size = tokens.length;
            String prgm = tokens[0];
            int yr = Integer.parseInt(tokens[1]);
    
            String lastname = tokens[3];
            Double avg = Double.parseDouble(tokens[2]);
             newType inf = new newType(prgm, yr, avg, lastname);
             studInfo.add(inf);
            System.out.println("Information added.");
    //      keyboard.close();
            return;
        }
    }
 类似资料:
  • 问题内容: 每当我运行此命令时,该函数就可以正常使用。当我选择洞穴时,消息会每隔2秒弹出一次,然后当它越过该部分时,就会出现错误: 我已经尝试过和,并且在该方法中使用时,出现了很多错误。当我在方法中使用时,它不接受我的输入。 当我在该方法中使用时,它不接受我的字符串输入,而直接进入另一个游戏,但是布尔值返回并且它无限地发送垃圾邮件“ Which Cave …”。 我已经阅读了错误报告,以及类似问题

  • 问题内容: 我正在开发一个访问数据库的项目,但是我遇到了一些问题。我尝试使用hibernate3.2和4.52,但是它不起作用。 例外是在这行代码中 问题答案: 您需要在类路径中检查类org.apache.log4j.Level的冲突版本并进行解决。版本1.2.12或更高版本的log4j jar中提供了TRACE级别。

  • 我最近安装了intellij IDEA 14.0,为了确保一切正常,我创建了一个简单的Hello World程序。我不明白为什么输出不正确,为什么会出现这个错误。如果有人能帮忙,那就太好了。 以下是程序: 这是错误:

  • 问题内容: 当我运行程序进行智能卡读取时,会出现此异常。我的设备未连接。请帮我。 问题答案: 这意味着它无法加载您需要的共享库。这可能是因为。 该库不在您的库路径中。 该库名称不正确,例如,Unix上LIBRARY必须为libLIBRARY.so。 您无法执行该库。 该库不适用于操作系统或JVM的位大小。例如64位JVM将不会加载32位库。 您的JRE未正确安装,并且无法加载其自己的库之一。 您正

  • 我不断收到错误消息: 线程“main”java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)在java.lang.Integer.ParseInt(Integer.java:580)在java.lang.Integer.ParseInt(Integer.java:615)在TestClass.Mai

  • 运行代码后,我收到以下错误 线程 “main” java.time.format.DateTimeParseException 中的异常:文本 '03-09-1999' 无法在 java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2051) at java.base/java.time

  • 问题内容: 我需要将json转换为pojo。我决定使用jackson,并将jackson-core-2.2.0.jar,jackson- databind-2.4.4.jar和jackson-annotations-2.1.2.jar添加到项目的类路径中 我创建了以下课程: 及以下课程: 我想将json转换为pojo并将其保存在数据库中。我不断出现以下错误: 问题答案: 我遇到了完全相同的问题。我