在我的Java编程课程中,我们获得了编写游戏的任务,我目前正致力于从文件中加载已保存的游戏。
我逐行读取此文件并将其拆分为一个标记数组。
在这个保存游戏文件中,第一行包含8对玩家数字的x和y坐标(2个玩家* 4个数字)。
读取和解析文件工作正常但是当我尝试将连续数组中的坐标复制到存储数字位置的Dimension类时,我得到一个NullPointerException。
以下是代码:
Dimension Player0Positions[] = new Dimension[4];
Dimension Player1Positions[] = new Dimension[4];
int bufferArray[] = new int[16];
for(int i = 5; i < 21; ++i) {
bufferArray[(i-5)] = Integer.parseInt(firstLineData[i]);
}
for(int i = 0; i < 4; ++i) {
Player0Positions[i].setSize(bufferArray[(2*i)], bufferArray[(2*i + 1)]);
Player1Positions[i].setSize(bufferArray[(2*i + 8)], bufferArray[(2*i + 9)]);
}
复制中的对象存在并且我没有留下任何索引边界(2 *(i = 3)+ 9 = 15)但我甚至没有到达那里因为代码在第一次循环迭代时崩溃抛出第Player0Positions[i].setSize(
行的异常......
答案 0 :(得分:1)
Dimension
s数组的所有元素都未初始化。
即。所有Player0Positions[i]
和Player1Positions[i]
都为空,因此当您尝试在其上调用.setSize
时,您会获得NPE。
所以,你可能想先把它们初始化 -
for(int i = 0; i < 4; ++i) {
Player0Positions[i] = new Dimension();
Player0Positions[i].setSize(bufferArray[(2*i)], bufferArray[(2*i + 1)]);
Player1Positions[i] = new Dimension();
Player1Positions[i].setSize(bufferArray[(2*i + 8)], bufferArray[(2*i + 9)]);
}