[英]Strange For-loop behavior
我在包含if-else if-else块的for循环中看到奇怪的行为。
如果我执行以下操作,则可以正常工作,但列表中不存在的名称除外:
Resources res = context.getResources();
String[] debtnameslist = res.getStringArray(R.array.debtnames);
for(int i=1; i < debtnameslist.length; i++){
if (debtname.toLowerCase().contains(debtnameslist[i]))
{
int resID = context.getResources().getIdentifier("ic_dialog_"+debtnameslist[i], "drawable", "com.freshsoft.android.debtdestroyer");
icon.setImageResource(resID);
}
else if ((debtname.toLowerCase().contains("best") && (debtname.toLowerCase().contains("buy"))))
{
icon.setImageResource(R.drawable.ic_dialog_bestbuy);
}
// else {
// icon.setImageResource(R.drawable.ic_dialog_dollar);
// }
}
给我这个: http : //i54.tinypic.com/rsr33q.png
它可以工作,除了“测试”应显示通用符号。 如果取消注释// else部分,则会得到以下信息:
http://i54.tinypic.com/25kj6z6.png
我的xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="debtnames">
<item >chase</item>
<item >discover</item>
<item >citibank</item>
<item >amazon</item>
<item >american express</item>
<item >diners</item>
<item >mastercard</item>
<item >visa</item>
<item >paypal</item>
<item >macys</item>
<item >bmw</item>
<item >target</item>
</string-array>
</resources>
问题是-如果debtnameslist[i]
名称debtnameslist[i]
不包含debtnames
名称中的任何名称或“最佳购买”,它将放置美元图标-因为第一个if
为false,第二个if
也为false。
您不能在其中放置非条件的else
子句,因为它将覆盖下一个循环中的图标!
正如您所看到的,在这种情况下唯一可以使用的1是“目标”-因为它是最后一个,所以没有下一个循环可以覆盖其图标。
将其拧紧一会儿后,便将其弄清楚。 诀窍是如果找到匹配项则打破循环:
for (String name : debtnameslist) {
boolean matches = debtname.toLowerCase().contains(name);
if (matches)
{
int resID = context.getResources().getIdentifier("ic_dialog_"+name, "drawable", "com.freshsoft.android.debtdestroyer");
icon.setImageResource(resID);
break;
} else {
icon.setImageResource(R.drawable.ic_dialog_dollar);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.