2012-04-24 2 views
2

У меня очень странная проблема. У меня есть этот объект Procedure, который содержит два правила. Теперь мне захотелось обходить эти правила с помощью цикла for и вернуть 1 правило. Но я всегда получаю нуль. Похоже, что он пропускает оператор if и напрямую переходит к моей возвратной нулевой части.если инструкция не выполнена для цикла андроида

Имя первого правила - возраст, а имя другого правила - несчастные случаи. Я включил метод здесь.

Мой журнал дает ответ:

RuleName: 'возраст' и переменную: 'несчастных случаев' и это правда: 'ложь'

RuleName: 'несчастные случаи' и переменная: 'несчастные случаи' и верно: 'истина'

private Rule searchRule(String ruleName) 
    { 
     List<Rule> test = this.procedureObject.getRules(); 

     for(Rule rule : test) 
     { 
      Log.d("debug", "rulename: '" + rule.getName() + "' and variable: '"+ruleName+"' and is true ?: '"+rule.getName().equalsIgnoreCase(ruleName)+"'"); 
      if(rule.getName().equalsIgnoreCase(ruleName)) 
      { 
       return rule; 
      } 
     } 

     return null; 
    } 

EDIT: он работает сейчас.

Я только что изменил это в вызывающем коде:

Rule makeRule = RuleFactory.getNewRuleClassNameInstance(this.searchRule(ref2.getName()).getClass().getSimpleName()); 

к:

Rule foundRule = this.searchRule(ref2.getName()); 

Rule makeRule = RuleFactory.getNewRuleClassNameInstance(foundRule.getClass().getSimpleName()); 

А потом вдруг работает.

+0

Он уверен, что условный блок должен быть выполнен. Таким образом, мы можем быть на 100% уверены, что работает, возможно, выкидывают оператор журнала непосредственно перед каждым «возвратом» (вы перешли в отладчик?). –

+0

С вашим кодом code.just нет ничего плохого, поэтому вы можете проверить свой результат выполнения журнала. Или может быть не синхронизирована ..! – user370305

+0

@MichaelBurr Да, я шагнул шаг за шагом через отладчик. Это действительно странное поведение. –

ответ

0

Я изменил:

Rule makeRule = RuleFactory.getNewRuleClassNameInstance(this.searchRule(ref2.getName()).getClass().getSimpleName()); 

к:

Rule foundRule = this.searchRule(ref2.getName()); 
Rule makeRule = RuleFactory.getNewRuleClassNameInstance(foundRule.getClass().getSimpleName()); 

и тогда казалось, на работу.

0

Вы можете попробовать это?

if(rule.getName().equalsIgnoreCase(ruleName)) 
{ 
    Log.d("debug", "rulename: '" + rule.getName() + "' and variable: '"+ruleName+"' and is true ?: '"+rule.getName().equalsIgnoreCase(ruleName)+"'"); 
    return rule; 
} 
Смежные вопросы