2015-04-29 5 views
2

Я пытаюсь выполнить эту функцию.Возврат и перерыв в foreach-loop ArrayList

private ArrayList<Note> notes; 

    //Adding notes in arraylist 

    public Note getNoteByDay(Calendar calendar) { 
      for (Note note : notes) { 
       if (note.getReminder().getTime()/Constants.DAY_IN_MILLIS == calendar.getTimeInMillis()/Constants.DAY_IN_MILLIS) { 
        Log.d("NOTE_ID", note.getName()); 
        return note; 
       } 
      } 
      return null; 
    } 

Но когда я называю эту функцию для другого календаря

  1. Я всегда получаю первую ноту.
  2. Я всегда получаю 2 звонка Log.d().
  3. Когда я использую break; вместо return note; я всегда получаю 1 вызов Log.d()

Где моя проблема?

+3

Это единственное место, которое вы называете 'Log.d()'? –

+0

Проверьте размер с помощью 'notes.size()' –

+3

@VinayakPingale В данном конкретном случае размер не имеет значения. – CKing

ответ

1

1) Я всегда получаю первое примечание.

Это потому, что ваше первое примечание удовлетворяет вашим требованиям в инструкции if.

2) Я всегда получаю 2 вызова Log.d().

Это означает, что проблема не в этом коде, а на месте, который вызывает этот метод. Используйте debugger или stacktrace, чтобы определить, кто и когда вызывает этот метод. Он также может быть многопоточным или многозадачным - независимо от среды или платформы, которые вы используете.

3) Когда я пользуюсь перерывом; вместо этого обратите внимание; Я всегда получаю 1 вызов Log.d() Где моя проблема?

Это подтверждает только случай 2. В случае прерывания он возвращает значение null, а ваше место вызова имеет исключение с нулевым указателем и не вызывает его снова.

Нижняя строка - проблема не в этом предоставленном коде, а на месте, где вызывается этот метод. Eclipse имеет приятную функцию - она ​​показывает, где используется метод - используйте эту функцию.

Смежные вопросы