我这里有一些代码
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,用于它包含的构造函数,你应该如何创建和每个对象需要参数的对象数组?
答案 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。