1

このエラーが発生し続けます:

スレッド「メイン」での例外 java.lang.NullPointerException at BattleshipCMDGame.GenerateShips(BattleshipCMDGame.java:33) at BattleshipCMDGame.main(BattleshipCMDGame.java:7)

私がやりたいことは、メソッドで新しく作成されたクラス型配列を、メイン メソッドで作成された空の配列に返すことだけです。これが私のコードです:

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;
}
}
4

3 に答える 3

3
if (ship[z].GetLocation() != 0)

ship[z] は空 (null) であるため、エラーが発生します。最初に船の配列を埋める必要があります。

重要なことは、ship配列はobjectsではなく参照を格納するため、最初に入力する必要があることです。そう

Ship[] ship = new Ship[10]

自分で割り当てる必要がある実際の Ship オブジェクトである 10 個のShip参照 ( nullで始まる) を格納します。

于 2013-08-20T18:11:28.820 に答える
3

次の行で配列を作成しました。

Ship[] ship = new Ship[numShips];

しかし、すべての要素はnullであるため、NullPointerException結果は次の行になります。

if (ship[z].GetLocation() != 0)

Ship次のように、オブジェクトを配列内の場所に割り当てる必要があります。

ship[z] = new Ship();
于 2013-08-20T18:11:34.797 に答える