0
votes

I have been trying to get this to work since I woke up and I simply cannot figure out what is causing this exception.

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();

And this is the output, line 167 is "dictionary.add(scan.nextLine)":

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

alligator

zebra

kangaroo

ice

snow

bobcat

skyscraper

Exception in thread "AWT-EventQueue-1" java.util.NoSuchElementException: No line found at java.util.Scanner.nextLine(Scanner.java:1585) at Word.jButton1ActionPerformed(Word.java:167) at Word.access$100(Word.java:16) at Word$2.actionPerformed(Word.java:92) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6505) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.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) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729) at java.awt.EventQueue.access$200(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:688) at java.awt.EventQueue$3.run(EventQueue.java:686) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:702) at java.awt.EventQueue$4.run(EventQueue.java:700) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:699) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

the text file is:

alligator

zebra

kangaroo

ice

snow

bobcat

skyscraper

3
can you paste the content of dictionary.txt if its a small fileM Sach
Glad to know your problem's fixed now. :)Jops

3 Answers

1
votes
 while (scan.hasNextLine()) {
        System.out.println(scan.next());
        dictionary.add(scan.nextLine());
    }

You check once to see if there's more content, and then you call a form of next() twice. There is no guarantee that the second call will not fail (as you've found out).

1
votes

I am guessing you are trying to skip the blank lines in the code.

This should work just fine. Take the value from scan.next into a temp String variable, and use the same to print as well as add to dictionary.

String tmp;
    while (scan.hasNextLine()) {
        tmp = scan.next();
        System.out.println(tmp);
        dictionary.add(tmp);
    }
    scan.close();
1
votes

Both of these move to the next token:

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

To address the error, do a check again before calling the second line:

while (scan.hasNextLine()) {
    System.out.println(scan.next());
    if (scan.hasNextLine())
        dictionary.add(scan.nextLine());
}