Странное поведение For-loop - PullRequest
       1

Странное поведение For-loop

0 голосов
/ 23 октября 2011

Я вижу странное поведение в цикле for, который содержит блок if-else if-else.

Если я сделаю следующее, все будет работать как положено, за исключением имен, которых нет в моем списке:

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 голосов
/ 24 октября 2011

Разобрался, после того, как немного повредил с ним. Хитрость заключалась в том, чтобы разорвать петлю, если найдено совпадение:

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);
            }
        }
0 голосов
/ 23 октября 2011

Проблема в том, что если debtnameslist[i] не содержит ни одного из имен в debtnames, ни "Best Buy", то появится значок доллара - потому что первое if ложно, второе тоже ложно.

Вы не можете поместить туда условные else предложения, потому что они переопределят значок в следующем цикле!

И, как вы можете видеть, единственная 1, которая работает вэтот случай является «целевым» - поскольку он последний, нет следующего цикла для переопределения его значка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...