获取国家代码的方法错误

3

有人能够为什么代码不起作用提供一些见解吗?问题在于countries部分的[numCountries]=newCountry;

我不确定为什么会一直提示类型不匹配,无法将Country[]转换为Country,但我认为我的countries[numCountries]是Country[]类型,因为我已经在代码的第二行调用了它,并给它赋予了那种类型?

public class World{

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

public boolean addCountry(Country[] newCountry){
    if(!(newCountry==null)){
        countries[numCountries]=newCountry;     //the newcountry part doesnt work, red zigzag line underlining it here im not sure why
        numCountries++;
        return true;
    }
    else
        return false;

       }


}

4
感谢您告诉我们错误信息和您认为问题所在的位置。 :) 加1支持。 - jamesmortensen
1
因为你将newCountry声明为一个数组,而不是单个的Country。 - Dave Newton
1
戴夫所说的是写成if(newCountry!=null)更整洁。 - Tass
1
我的观点是,(!(newCountry == null)) 比 (newCountry != null) 更难读懂。而如果反转逻辑并在 (newCountry == null) 的情况下立即返回,则更难读懂。 - Dave Newton
2
这是完全不同的问题,现在的答案已经没有意义了。问题在于您从未实例化国家数组,只有一个对它的引用。 - Dave Newton
显示剩余2条评论
2个回答

3
您的方法表明您正在添加一个国家,而不是添加一个国家数组,因此您的方法参数可能应该去掉数组括号"[]"。这样做的好处是,方法变得更加清晰易懂,因为它传递了您所说应该传递的——单个国家对象。在尝试向数组中添加另一个国家之前,您还需要检查您的方法是否超出了国家数组的大小。这可以通过一个简单的if语句来完成。
如果您想添加一个国家数组,则可以创建另一个方法,比如addCountries(Country[] newCountries)。但我认为您真正想做的是使用已经纠正过的当前方法。
如果有任何疑问,请随时询问——只需在本答案下方写下评论即可。

谢谢,那很有道理,但现在虽然编译通过了,但我遇到了一个空指针错误,这很奇怪,因为我已经创建了新的世界、新的国家和新的城市,而且我也编辑了我的代码和问题在顶部 ^^ - Liquified
1
@user1343502:你可能需要针对此问题提出一个新的问题。但是,无论你是否这样做,你都需要指出哪一行抛出了NPE(NullPointerException),因为这将是查看哪个变量为空以及原因的关键。 - Hovercraft Full Of Eels
@user1343502:看看 Dave 最新的评论,他告诉你为什么会出现 NPE 错误。 - Hovercraft Full Of Eels

3

Country后面的方括号表示您的addCountry方法正在添加一个国家数组,但您很可能只想一次添加一个国家。

因此,请将其更改为:

public boolean addCountry(Country newCountry){
    ....
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接