addCountry nullpointer错误

时间:2012-05-16 01:15:28

标签: java arrays nullpointerexception

有人可以提供一些有关代码无效的原因吗?

[编辑:修正代码和新错误]

我在线程“main”java.lang.NullPointerException中收到错误异常 根据我的输出,World.addCountry()(第8行)代码出错,addWorldplaces()(第5行)代码出错。

我觉得这与未实例化world类有关吗?可能吗?

public class World{

private Country[] countries;
private int numCountries=0;

public boolean addCountry(Country newCountry){
    if(!(newCountry==null)){
        countries[numCountries]=newCountry;

        numCountries++;
        return true;
    }
    else
        return false;
       }
}

public static void addWorldplaces(World pWorld){
         Country usa=new Country("USA", 1);
        pWorld.addCountry(usa);
}

3 个答案:

答案 0 :(得分:2)

数组实际上是Java中的对象。您需要先分配Countries阵列才能使用它。您通常在构造函数中执行此操作:

public class World
{
  private Country[] countries;
  private int numCountries;

  public World()
  {
    this.countries = new Country[16];       // allocate the array
    this.numCountries = 0;
  }

  ...
}

您需要适当调整数组的大小。或者,您可以查看ArrayList,如果需要,它会自动增大。

答案 1 :(得分:2)

有两种可能性:

  1. 没有实例化World对象(我没看到pWorld第一次实例化的地方)
  2. 您的Country数组未实例化。你必须这样做private Country[] countries = new Country[10]
  3. 注意: 请发布例外的堆栈跟踪。

答案 2 :(得分:1)

格雷格·科普夫是对的,你必须在把一些东西放入其中之前初始化一个数组。

在您的情况下,数组的大小未确定,ArrayList更好。 所以你不需要自己处理扩展数组或国家号码。

public class World {

  private ArrayList<Country> countries = new ArrayList<Country>();

  public boolean addCountry(Country country) {
      if (country != null) {
          countries.add(country);
          return true;
      } else {
          return false;
      }
  }

  public int getCountryNumber() {
      return countries.size();
  }
  ...
}