Java 如何解决将数组返回到空数组的问题
我不断地发现这个错误: 线程“main”java.lang.NullPointerException中的异常位于 BattleshipCMDGame.GenerateShips(BattleshipCMDGame.java:33)位于 main(BattleshipCMDGame.java:7) 我所要做的就是将方法中新创建的类类型数组返回到主方法中创建的空数组中。这是我的密码:Java 如何解决将数组返回到空数组的问题,java,arrays,reference,Java,Arrays,Reference,我不断地发现这个错误: 线程“main”java.lang.NullPointerException中的异常位于 BattleshipCMDGame.GenerateShips(BattleshipCMDGame.java:33)位于 main(BattleshipCMDGame.java:7) 我所要做的就是将方法中新创建的类类型数组返回到主方法中创建的空数组中。这是我的密码: import java.util.*; public class BattleshipCMDGame { publ
import java.util.*;
public class BattleshipCMDGame
{
public static void main(String[] args)
{
Ship[] ship = GenerateShips(3);
Scanner in = new Scanner(System.in);
for (int i = 0; i < ship.length; i++)
{
System.out.println(ship[i].GetName() + " : Location - " + ship[i].GetLocation());
}
}
public static Ship[] GenerateShips(int numShips)
{
Ship[] ship = new Ship[numShips];
Random rand = new Random();
int randLoc;
String prevRands = "";
String randToString = "";
for (int i = 0; i < ship.length; i++)
{
randLoc = 1 + rand.nextInt(7);
randToString = Integer.toString(randLoc);
for (int z = 0; z < ship.length; z++)
{
prevRands = "";
if (ship[z].GetLocation() != 0)
{
prevRands += Integer.toString(ship[z].GetLocation());
}
}
while (prevRands.contains(randToString))
{
randLoc = 1 + rand.nextInt(7);
randToString = Integer.toString(randLoc);
}
ship[i] = new Ship("Ship no. " + (Integer.toString(i)), randLoc);
}
return ship;
}
}
import java.util.*;
公共类战斗游戏
{
公共静态void main(字符串[]args)
{
Ship[]Ship=发电机提示(3);
扫描仪输入=新扫描仪(系统输入);
对于(int i=0;i
ship[z]为空(null),因此会出现错误。
你需要先填充你的飞船阵列
重要的是:ship数组存储的是引用而不是对象,因此需要首先填充它。所以
Ship[] ship = new Ship[10]
存储10个Ship引用(以null开头),这是您需要自己指定的实际Ship对象
ship[z]为空(null),因此会出现错误。
你需要先填充你的飞船阵列
重要的是:ship数组存储的是引用而不是对象,因此需要首先填充它。所以
Ship[] ship = new Ship[10]
存储10个Ship reference(以null开头),即您需要自己指定的实际Ship对象。您已经在此行中创建了数组:
Ship[] ship = new Ship[numShips];
if (ship[z].GetLocation() != 0)
但是所有元素都是null
,因此这一行出现NullPointerException
:
Ship[] ship = new Ship[numShips];
if (ship[z].GetLocation() != 0)
您需要将Ship
对象分配到数组中的位置,如下所示:
ship[z] = new Ship();
您已在此行中创建了阵列:
Ship[] ship = new Ship[numShips];
if (ship[z].GetLocation() != 0)
但是所有元素都是null
,因此这一行出现NullPointerException
:
Ship[] ship = new Ship[numShips];
if (ship[z].GetLocation() != 0)
您需要将Ship
对象分配到数组中的位置,如下所示:
ship[z] = new Ship();
您应该初始化数组的每个元素:
ship[z] = new Ship();
顺便说一句,您应该使用以小写字母开头的方法名称,这是标准的您应该初始化数组的每个元素:
ship[z] = new Ship();
顺便说一句,您应该使用以小写字母开头的方法名称,这是标准的,正如迁移中所指出的,实现问题最好在SO上处理,而不是在p.SE上处理。对于P.SE来说,使用null与空ArrayList的问题,或者传回null与空ArrayList的最佳选择,或者询问的要点更合适(尽管看,这个主题还有其他问题)。作为旁白,特别是对于这段代码,请看而不是做
prevards+=Integer.toString(…)代码>您可能正在创建和丢弃大量不必要的字符串。正如迁移中所指出的,实现问题最好在SO上处理,而不是在P.SE上处理。对于P.SE来说,使用null与空ArrayList的问题,或者传回null与空ArrayList的最佳选择,或者询问的要点更合适(尽管看,这个主题还有其他问题)。作为旁白,特别是对于这段代码,请看而不是做prevards+=Integer.toString(…)代码>你可能创建并丢弃了很多不必要的字符串。是的,我自己解决了这个错误,你是对的。相反,我只是创建了一个int count变量,并在每次实际为新的ship对象分配ship var时递增它。我将for循环中的一个数字替换为count,这样它就知道有多少个ships对象实际上从数组中引用了。是的,我自己解决了这个错误,你是对的。相反,我只是创建了一个int count变量,并在每次实际为新的ship对象分配ship var时递增它。我将for循环中的一个数字替换为count,这样它就知道有多少个ships对象实际具有来自数组的引用。