【问题标题】:How do I fix this source not found error? Reading text file with buffered reader - Java如何修复此源未找到错误?使用缓冲阅读器读取文本文件 - Java
【发布时间】:2014-08-04 21:12:45
【问题描述】:

我正在尝试读取位于应用程序 src 目录中的 deck.txt。 我得到的错误是:

线程“main”中的异常 java.lang.NullPointerException 在甲板上。(Deck.java:15) 在 TwentyOne.main(TwentyOne.java:7)

TwentyOne 中的第 7 行就是:

Deck deck = new Deck();

文件每行有一个整数,长度为 104 行。

cards[i].suit.... 是抛出异常的那一行

try (BufferedReader br = new BufferedReader(new FileReader("src/deck.txt"))) {   
        for (int i = 0; i < 104; i++) {                 
            cards[i].suit = Integer.parseInt(br.readLine());
            cards[i].rank = Integer.parseInt(br.readLine());
        }

    } catch (IOException e) {
        e.printStackTrace();
    }

为了看看出了什么问题,我将这段代码从 eclipse 中复制到另一个目录中,这一次只是 println(br.readLine()) 而不是将它分配给数组,它工作正常。

我是不是把文件放在了错误的位置,或者还有什么我遗漏的东西? 感谢您的帮助

【问题讨论】:

  • 哪行代码抛出异常?
  • cards[i].suit = Integer.parseInt(br.readLine());

标签: java input io bufferedreader ioexception


【解决方案1】:

您正试图从 104 行文件中读取 208 行。每次调用 br.readLine() 时都会读取下一行。

我假设文件的格式是花色和等级的交替行,因此请尝试将迭代次数减少到 52。

编辑: 从 cmets 中声明了卡片数组,但卡片对象未初始化。使用前初始化数组中的对象修复了 NullPointerException。

【讨论】:

  • 我将 'i
  • @Mascros 你确定“cards”数组包含 52 个卡片对象吗?
  • 是的,这就是格式。我减少了迭代,但我仍然得到同样的错误。在第一次迭代中进行调试时会出错。
  • 是的,这是我的卡片数组声明:private Card[] cards = new Card [52];
  • @Mascros 但是您还没有初始化数组中的 Card 对象。尝试将 cards[i] = new Card(); 添加为 for 循环中的第一行。
猜你喜欢
  • 1970-01-01
  • 2013-03-29
  • 2011-04-20
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 2018-05-18
相关资源
最近更新 更多