我从jUnit测试用例中调用此函数,其中包含以下信息:
// abbr = "US";
// Countries = array of two objects one with iso2 = "us"
public Country getCountryFromAbbr(String abbr) {
abbr = abbr.toLowerCase();
for (int i = 0; i < Countries.size(); i++) {
Country country = Countries.get(i);
String iso2 = country.ISO2.toLowerCase();
String iso3 = country.ISO3.toLowerCase();
if (iso2.equals(abbr) || iso3.equals(abbr)) {
return country;
}
}
return null;
}
调试时,ISO2
us
的{{1}}的第二个对象为true,另一个为iso2.equals(abbr)
。但是,不返回country,调试器完成循环并返回false
。
我很困惑,因为它是真的||错是真的。我错过了什么吗?
以下是各国的嘲笑:
null
<小时/> 编辑: 我正在使用Eclipse并使用我的Droid X 2.3.3
进行调试
答案 0 :(得分:1)
如果条件简单,它能正常工作吗?
if (iso2.equals(abbr)) {
return country;
}
if(iso3.equals(abbr)){
return country;
}
答案 1 :(得分:0)
这看起来像是Enum的工作! (whoooooosh!)
public enum Country {
GREAT_BRITAIN("GB", "GBR"),
USA("US", "USA");
private String iso2;
private String iso3;
private Country(String iso2, String iso3){
this.iso2 = iso2;
this.iso3 = iso3;
}
public static Country getCountry(String a){
for (Country c : Country.values()){
if (c.iso2.equalsIgnoreCase(a) || c.iso3.equalsIgnoreCase(a)){
return c;
}
}
return null; // no country found!
}
}
如果Country是不可变的(你不会改变其中的任何值),那么这是一种巧妙的方式 - 你也可以添加id和name作为属性。如果您需要访问这些属性,请公开getter。
您当前的方法将Countries
作为实例变量访问,而不是作为方法的参数,因此可能存在副作用。