实例化对象时java.lang.NullPointerException?

时间:2013-11-30 22:45:16

标签: java arrays null nullpointerexception

所以我非常肯定这段代码应该可以运行,但是当我运行它时它会吐出来。

问题发生在: return planetArray[arr[0].viewPosition()].testCost();

我的代码发布在下面。我已经仔细研究了这个,但看不出它是怎么回事? 目的是获取Player [x]的currentPosition并使用它来检查玩家[x]的行星成本并返回成本。

很抱歉,如果我发布的代码太多/代码不够,则不确定错误的位置。

public class Launcher
{
    private static Planet returnCost;
    private static Planet myTest;
    private static PlanetInfo myPlanetInfo;
    private static PlanetInfo[] planetArray;
    private static Player[] arr; //NEED THIS FOR arr = myArray.getPlayerArray(); to work..
    public static void main(String[] args)
    {
        Planet myPlanetArray = new Planet();
        PlayerArray myArray = new PlayerArray();
        myPlanetArray.getPlanetArray();
        myArray.getPlayerArray();
        planetArray = myPlanetArray.getPlanetArray();

        arr = myArray.getPlayerArray(); //holy moses this worked...
        System.out.println("player 1's ID: " + arr[0].viewID());
        System.out.println("player 1's balance: " + arr[0].viewBalance());
        arr[0].playerGo();
        System.out.println("You've landed on: " /* + myPlanetArray.returnName()*/ + " it costs: "   +   myPlanetArray.returnCost());/*arr[0].viewPosition());*/
//^^^this line causes the error
    }
}

和...

public class PlanetInfo
{
    Scanner scan = new Scanner(System.in);
    private static PlanetInfo[] planetArray;
    private static Player[] arr;
    private String name; //same with this
    private int cost; // doesnt need setter or getter methods, it's permanent.
    private int position; // same with this
    private int group; // same with this
    private int owner;
    private int rent; // done
    private int town;
    private int city;
    private int sellValue; // same with this
    public void setRent()
    {
        System.out.println("How many towns would you like to add?");
        town = scan.nextInt();
        if(position != 39 && town == 1) {rent *= 5;}
        else if(position == 39 && town == 1){rent = 200;}
        if(town == 2) {rent *= 3;}
        if(position <= 13 && town == 3) {rent *= 3;}
        else if(position > 13 && town == 3) {rent *= 2.5;}
        if(position < 20 && town == 4) {rent *= 1.45;}
        else if((position > 20 && position < 40) && town == 4) {rent *= 1.3;}
    }
    public int getRent(){return rent;}

    //public void setOwner(){owner = arr[0].viewID();}
    //public int getOwner(){return owner;}
    //^^^^Will do this in Player class.
    public PlanetInfo(String planetName, int planetCost, int boardPosition, int groupColor, int currentOwner, int startRent, int numTown, int numcity)
    {
        cost = planetCost;
        name = planetName;
        position = boardPosition;
        group = groupColor;
        owner = currentOwner;
        rent = startRent;
        town = numTown;
        city = numcity;
        sellValue = cost/2;
    }
}

最后..

import java.util.Scanner;
import java.util.Random;
public class Planet
{
    private static Player[] arr;
    private static PlanetInfo[] planetArray;
    private String name;
    private int cost;
    private int playerPosition;
    public void Planet()
    {
        //cost,boardposition,color,currentowner,startingRent,#towns,#city
        Planet testPlanet = new Planet();
        PlayerArray myArray = new PlayerArray();
        PlanetInfo[] planetArray;
        myArray.getPlayerArray();
        arr = myArray.getPlayerArray();
        planetArray = new PlanetInfo[40];

        planetArray[1] = new PlanetInfo("Tatooine Mos Eisley",60,1,1,-1,2,0,0);
        planetArray[3] = new PlanetInfo("Tatooine Mos Espa",60,3,1,0,-1,0,0);
        planetArray[6] = new PlanetInfo("Dagobah",100,6,2,-1,6,0,0);
        //MORE OF THIS NOT IMPORTANT SO REMOVED
        planetArray[34] = new PlanetInfo("Alderaan",320,34,7,-1,28,0,0);
        planetArray[37] = new PlanetInfo("Coruscant Jedi Temple",350,37,8,-1,35,0,0);
        planetArray[39] = new PlanetInfo("Coruscant Senate",400,39,8,-1,50,0,0);

         public int testCost()
    {
        return cost;
    }
    }

    public PlanetInfo[] getPlanetArray()
    {
        return planetArray;
    }
    public String testName()
    {
        return name;
    }
    public int testCost()
    {
        return cost;
    }

    public int returnCost() //returns int of cost
    {
        return planetArray[arr[0].viewPosition()].testCost();
    }
}

1 个答案:

答案 0 :(得分:-1)

你永远不会展示PlanetArray课的样子。您很可能没有实例化Player[]方法中返回的getPlanetArray()数组。