我在这段代码中有一个错误,我将公共类变量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;
字符串值。
答案 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