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