Java中的空指针异常。 (用数组循环打破?)

时间:2014-01-31 23:24:05

标签: java arrays for-loop

所以我已经阅读了其他人的一些其他问题,但无法找到适合我的这个问题的解决方案。 我正在学习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 我很困惑。这里有什么想法? 提前谢谢。

1 个答案:

答案 0 :(得分:5)

您需要为数组的每个插槽创建一个新的Ship对象。请记住,对象的默认值为null

for (int i = 0; i < shipNames.length; i++){
        ships[i] = new Ship();
        ships[i].setName(shipNames[i]);
}