如何创建需要参数的对象数组

时间:2014-06-01 04:02:02

标签: java arrays nullpointerexception jbutton

我这里有一些代码

final Ship[] Ships = new Ship[3];

for(int x = 0; x < 3; x++)
{
    Ships[x].setText("Set Ship length: " + (x+1)); // this line in particular
}

我得到一个空指针异常,我认为这是因为Ships对象在其参数中需要一个字符串和一个int,用于它包含的构造函数,你应该如何创建和每个对象需要参数的对象数组?

4 个答案:

答案 0 :(得分:2)

更改以下代码..

final Ship[] Ships = new Ship[3];

for(int x = 0; x < 3; x++)
{
    Ships[x].setText("Set Ship length: " + (x+1)); // this line in particular
}

以...

final Ship[] Ships = new Ship[3];

for(int x = 0; x < 3; x++)
{
    String stringValue = "Set Ship length: " + (x+1); //string you want in your ship object
    int intValue = 0; //int you want in your ship object..
    Ship ship = new Ship(stringValue, intValue);
    Ships[x] = ship;
    Ships[x].setText("whatever string your heart desires"); // this line in particular
}

您正在制作Ship类型的数组,但您从未将任何内容分配给数组。因此,当您尝试在数组中设置元素的文本时,您尝试将文本设置为空值,这将为您提供空指针异常

相反,您需要做的是首先创建一个Ship类型的对象,如上所示,传入您在其中提及的字符串和整数参数题。然后将此新对象添加到您的数组中。现在,您可以访问数组中的对象并调用该对象上的方法。

答案 1 :(得分:0)

你需要声明数组的变量类型[Object],[int],[String] ...

示例:

Object[] Ships = new Object[length]

长度将是例如。 8,9,10 - 数组的长度

也可以使用:

Ships[x].setText(String.valueOf(blah...))

答案 2 :(得分:0)

您需要先创建Ship对象,然后才能调用其上的任何方法。

Ships[x] = new Ship(whatever);

答案 3 :(得分:0)

你可以这样做:

Ship[] ships = new Ship[]
{ 
    new Ship("ship1", 1), 
    new Ship("ship2", 2), 
    new Ship("ship3", 3)
};

或者这样:

Ship ship1 = new Ship("ship1", 1);
Ship ship1 = new Ship("ship2", 2); 
Ship ship1 = new Ship("ship3", 3);

Ship[] ships = new Ship[]{ship1, ship2, ship3};

它是一个数组初始化器。数组将与您放在方括号{}(以逗号分隔)之间的元素一样长,在这种情况下为3。

正如Josh Engelsma所说,当你只是做“新船[3]”时,你唯一创建的是一个可以容纳3个船舶对象的阵列,但你不会创建任何船只。因此,您可以通过访问数组而不首先初始化它来获得空值。

使用数组初始值设定项,您发布的示例将等同于:

Ship[] ships = new Ship[]
{ 
    null, 
    null, 
    null
};

所以你得到一个长度为3的Ship数组,但它的所有值都是null。