奇怪的For循环行为

时间:2011-10-22 22:33:52

标签: android if-statement for-loop

我在包含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>

2 个答案:

答案 0 :(得分:0)

问题是 - 如果debtnameslist[i]不包含debtnames中的任何名称,也不包含“最佳购买”,则会显示美元图标 - 因为第一个if为假,第二个也是假的。

您不能在其中放置非条件else子句,因为它会覆盖下一循环中的图标!

正如你所看到的,在这种情况下唯一有效的是“目标” - 因为它是最后一个,没有下一个循环来覆盖它的图标。

答案 1 :(得分:0)

用螺丝拧了一会儿后想出来。诀窍是如果找到匹配就打破循环:

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);
            }
        }