所以我已经阅读了其他人的一些其他问题,但无法找到适合我的这个问题的解决方案。 我正在学习java并决定制作一个简单的基于控制台的Battleship游戏来测试一些基本的java原理和实现。 就在程序的最开头,我收到一个NullPointerException错误。
以下是我的代码在错误点之前的样子:
public class Battleship {
public static String[] xValues = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"};
public static String[] shipNames = {"patrol", "sub", "cruiser", "battle", "carrier"};
public static boolean isCollision = true;
//Create the Ship Array
public static Ship[] ships = new Ship[5];
public static void main(String[] args) {
//Welcome the User
System.out.println("Welcome to Battleship!\nLet's see how many tries it take to sink the ships!");
//Now, let's make 5 kinds of ships: Patrol Boat, Submarine, Cruiser, Battleship, Carrier. Each has a different size.
for (int i = 0; i < shipNames.length; i++){
ships[i].setName(shipNames[i]);
}
我唯一能想到的可能是封装问题,因为数组shipNames的静态值不在main方法之内。但是将它放在main方法中也不能解决它。我想也许垃圾收集发生在main方法的启动时并销毁了数组,因为它是空的,但这也不起作用,因为调试器显示shipNames.length = 5
我很困惑。这里有什么想法?
提前谢谢。
答案 0 :(得分:5)
您需要为数组的每个插槽创建一个新的Ship
对象。请记住,对象的默认值为null
。
for (int i = 0; i < shipNames.length; i++){
ships[i] = new Ship();
ships[i].setName(shipNames[i]);
}