【问题标题】:Java: java.util.NoSuchElementExceptionJava:java.util.NoSuchElementException
【发布时间】:2016-01-28 12:27:03
【问题描述】:

我正忙于编写一个算法,它将扫描一个文本文件并将其内容添加到一个数组中。但是我不断收到一条错误消息,上面写着:

“线程“AWT-EventQueue-0”中的异常 java.util.NoSuchElementException"

我已阅读 java 文档并了解到此错误与我没有正确设置我的文本文件的事实有关,但是我不明白如何修复它。

我已经包含了我的代码和文本文件的内容:

String [] CardPictureNames = new String [16];   

    try { 
        Scanner car = new Scanner (new File("cardNames.txt")).useDelimiter("#");
        String CN = "";

        while(car.hasNext()){
            for(int j=0; j <= CardPictureNames.length; j++ ){ 
                CN = car.next();
                CardPictureNames[j] = CN;
            }
        }
        car.close();
    } 
    catch (FileNotFoundException ex) {
        Logger.getLogger(MemoryForm.class.getName()).log(Level.SEVERE, null, ex);
        JOptionPane.showMessageDialog(this,"The file containing the names of the cards is missing.");
    }

以下是文本文件的内容:

2 of Clubs#
10 of Clubs#
Ace of Hearts#
Ace of Spades#
Joker#
King of Hearts#
Queen of Clubs#
Queen of Diamonds#
2 of Clubs#
10 of Clubs#
Ace of Hearts#
Ace of Spades#
Joker#
King of Hearts#
Queen of Clubs#
Queen of Diamonds#

有人可以向我解释一下如何解决这个问题吗? 提前谢谢你。

【问题讨论】:

    标签: java java.util.scanner


    【解决方案1】:

    用这个替换你的while/for循环组合

    for(int j=0; j <= CardPictureNames.length; j++ ){ 
            if (car.hasNext()) {
                CN = car.nextLine();
                CardPictureNames[j] = CN;
            }
    }
    

    你试图做的是循环两次。这是不必要的。添加 if 语句是为了防止发生异常,除非有另一行(最后没有),否则不运行获取卡名称的代码

    现在我假设有更好的方法来做到这一点。但这有效。而所谓的“更好”的方式可能不会有太大的不同。

    【讨论】:

    • 谢谢 Zachery,非常感谢您的帮助。我也设法为自己找到了解决办法。事实证明,我所要做的就是将我的原始代码从“