有人可以提供一些有关代码无效的原因吗?
[编辑:修正代码和新错误]
我在线程“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);
}
答案 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)
有两种可能性:
World
对象(我没看到pWorld
第一次实例化的地方)Country
数组未实例化。你必须这样做private Country[] countries = new Country[10]
。注意: 请发布例外的堆栈跟踪。
答案 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();
}
...
}