0

有人可以提供一些关于为什么代码不起作用的见解吗?

[编辑:固定代码和新错误]

根据我的输出,我在线程“main”中收到错误异常,java.lang.NullPointerExceptionWorld.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);
}
4

3 回答 3

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,如果需要,它会自动增大大小。

于 2012-05-16T01:22:08.167 回答
2

有2种可能:

  1. 没有实例化World对象(我没有看到pWorld第一次实例化的地方)
  2. 你的数组Country没有实例化。你必须这样做private Country[] countries = new Country[10]

注意:请发布异常的堆栈跟踪。

于 2012-05-16T01:29:08.810 回答
1

Greg Kopff 是对的,您必须先初始化一个 Array,然后再将其放入其中。

在您的情况下,数组的大小不确定,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();
  }
  ...
}
于 2012-05-16T02:00:32.073 回答