if语句或逻辑奇怪

时间:2011-12-14 04:15:21

标签: java android

我从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

进行调试

2 个答案:

答案 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作为实例变量访问,而不是作为方法的参数,因此可能存在副作用。