Двойной цикл for с условием if

#java #for-loop #if-statement

#java #цикл for #if-оператор

Вопрос:

У меня возникли проблемы с циклом double for в Java, в частности, с внутренним условием if

Вот мой код:

  public Set<Term> getAllTermsForStudent(Long id) {

        List<Term> terms = termRepository.findAll();
        Set<Term> set_terms = new HashSet<Term>(terms); //there are 3 terms
        Set<Exam> exams = studentService.getStudentExams(id); //in this student's case, there are 9 exams, 3 in each term
        Set<Exam> new_exams = new HashSet<>();

        for(Term t: set_terms) { 
            for(Exam e: exams) {
                if(t.getId() == e.getTerm().getId()) { //exam has term id, which indicates to which
                                                         term it belongs, so I'm comparing it, and I 
                                                         want to add it to new exam set
                    new_exams.add(e);
                }
            }
           t.setExams(new_exams);

        }

        return set_terms;
    }
  

Вывод этой функции дает мне 9 экзаменов в каждом семестре, как будто это игнорирует условие if

Комментарии:

1. Какой тип имеет Term.id ? Это Long или long ?

2. @caco3 Это длинный, каждый идентификатор в моем приложении имеет длинный

3. @MarkoLazarevic попробуйте t.getId().equals(e.getTerm().getId()) . «каждый идентификатор в моем приложении имеет длину» Должно ли это быть Long (должно ли это когда-либо быть null ), или это может быть long вместо этого?

4. @AndyTurner пробовал, та же проблема

Ответ №1:

Вывод этой функции дает мне 9 экзаменов в каждом семестре, как будто это игнорирует условие if

Это потому, что вы повторно используете то же самое Set для добавления экзаменов.

Объявите переменную внутри цикла.

 for(Term t: set_terms) { 
  Set<Exam> new_exams = new HashSet<>();

  for(Exam e: exams) {
    // ...
  }

  t.setExams(new_exams);
}