Java:java.util.NoSuchElementException

Java: java.util.NoSuchElementException

提问人:Steven 提问时间:10/29/2015 最后编辑:Paul PodgorsekSteven 更新时间:2/23/2016 访问量:740

问:

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

“线程”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.util.scanner

评论


答:

0赞 Zachery 10/30/2015 #1

将 while/for 循环组合替换为 this

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

您尝试做的是循环两次。这是不必要的。添加 if 语句是为了防止异常发生,除非有另一行(末尾没有)

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

评论

0赞 Steven 10/31/2015
谢谢Zachery,我真的很感谢你的帮助。我也设法为自己找到了解决方法。事实证明,我所要做的就是将我的原始代码从“<= CardPictureNames.length”更改为“< CardPictureNames.length”