保留循环变量值的问题

时间:2016-01-21 19:00:30

标签: java android

我在这段代码中有一个错误,我将公共类变量mCountryCode声明为String。

 for (mCountryCode : isoCountryCodes) {
     locale = new Locale("", mCountryCode);
     if(locale.getDisplayCountry().equals(mSpinner.getSelectedItem())) {
         mCountryCode = locale.getCountry();                        
         break;
     }
 }

如果我使用for (String mCountryCode : isoCountryCodes)代替,那么错误就会消失,但我无法在mCountryCode行之后维持break;字符串值。

4 个答案:

答案 0 :(得分:6)

是的,enhanced for statement并没有那样的工作。 总是声明一个新变量。

您可以使用:

for (String tmp : isoCountryCodes) {
    mCountryCode = tmp;
    ...
}

......虽然坦率地说这是一件非常奇怪的事情。在我看来,您并不是真的想将的每个值分配给mCountryCode,而只是匹配一个:

for (String candidate : isoCountryCodes) {
    Locale locale = new Locale("", candidate);
    if (locale.getDisplayCountry().equals(mSpinner.getSelectedItem())) {
        mCountryCode = candidate;
        break;
    }
}

请注意,这并未分配给现有的 locale变量,而是在每次迭代中声明一个新变量。这几乎肯定是一个更好的主意......如果需要,您可以随时分配到if语句中的字段。

答案 1 :(得分:2)

您没有正确使用增强型for循环:您需要指定类型,如下所示:

for (String countryCode : isoCountryCodes) {
     ...
}

现在,您可以根据需要在循环中使用countryCode字符串。

答案 2 :(得分:0)

最好在foreach

中使用本地变量
for (String code : isoCountryCodes) {
     locale = new Locale("", code);
     if(locale.getDisplayCountry().equals(mSpinner.getSelectedItem())){
        mCountryCode = locale.getCountry();                        
        break;
     }
 }

答案 3 :(得分:0)

如果你想在循环之外使用mCountryCode,你必须在循环之前声明它

String mCountryCode = null;
for(int i = 0; i < isoCountryCodes.length(); i++){
    locale = new Locale("", isoCountryCodes[i]);

    if(locale.getDisplayCountry().equals(mSpinner.getSelectedItem())){
        mCountryCode = locale.getCountry();                        
        break;
    }
}

//mCountryCode is still assigned