0

自从我醒来以来,我一直试图让它工作,我根本无法弄清楚是什么导致了这个异常。

try {
        scan = new Scanner(new File("dictionary.txt"));
    } catch (FileNotFoundException ex) {
        System.out.print("File not found");
    }
    ArrayList<String> dictionary = new ArrayList<String>();
    while (scan.hasNextLine()) {
        System.out.println(scan.next());
        dictionary.add(scan.nextLine());
    }
    scan.close();

这是输出,第 167 行是“dictionary.add(scan.nextLine)”:

C:\Users\Aaronbobaron\Documents\NetBeansProjects\W

鳄鱼

斑马

袋鼠

山猫

摩天大楼

线程“AWT-EventQueue-1”java.util.NoSuchElementException 中的异常:在 Word.jButton1ActionPerformed(Word.java:167) 处 Word.access$100 处的 java.util.Scanner.nextLine(Scanner.java:1585) 处找不到行(Word.java:16) 在 Word$2.actionPerformed(Word.java:92) 在 javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 在 javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341 ) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 在 javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)在 java.awt.Component.processMouseEvent(Component.java:6505) 在 java.awt.javax.swing.JComponent.processMouseEvent(JComponent.java:3321)。Component.processEvent(Component.java:6270) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container .java:2287) 在 java.awt.Component.dispatchEvent(Component.java:4687) 在 java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 在 java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)在 java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 在 java.awt.Container.dispatchEventImpl(Container.java:2273) 在 java.awt.Component.dispatchEvent(Component.java:4687) 在 java.awt。 EventQueue.dispatchEventImpl(EventQueue.java:729) 在 java.awt.EventQueue.access$200(EventQueue.java:103) 在 java.awt.EventQueue$3.run(EventQueue.java:688) 在 java.awt.EventQueue$3。在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java: 87) 在 java.awt.EventQueue$4.run(EventQueue.java:702) 在 java.awt.EventQueue$4.run(EventQueue.java:700) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.security .ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:699) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 在 java.awt.EventDispatchThread.pumpEventsForFilter (EventDispatchThread.java:161) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

文本文件是:

鳄鱼

斑马

袋鼠

山猫

摩天大楼

4

3 回答 3

1

这两个都移动到下一个令牌:

System.out.println(scan.next());
dictionary.add(scan.nextLine());

要解决该错误,请在调用第二行之前再次检查:

while (scan.hasNextLine()) {
    System.out.println(scan.next());
    if (scan.hasNextLine())
        dictionary.add(scan.nextLine());
}
于 2013-04-27T15:42:27.733 回答
1
 while (scan.hasNextLine()) {
        System.out.println(scan.next());
        dictionary.add(scan.nextLine());
    }

您检查一次以查看是否有更多内容,然后调用next()两次表单。不能保证第二次调用不会失败(正如您所发现的那样)。

于 2013-04-27T15:43:15.050 回答
1

我猜您正在尝试跳过代码中的空白行。

这应该工作得很好。将 scan.next 中的值放入一个临时字符串变量中,并使用它来打印以及添加到字典中。

String tmp;
    while (scan.hasNextLine()) {
        tmp = scan.next();
        System.out.println(tmp);
        dictionary.add(tmp);
    }
    scan.close();
于 2013-04-27T15:49:08.163 回答