Вы никогда не добавляете ни одного экземпляра в свой список.
Исходя из ваших ожиданий:
- 1-я попытка: я поместил значение 3 в
scanner.nextInt();
Он напечатал 2019-5-3
и "Didn't found a same date."
- 2-я попытка: я поставил значение
6
scanner.nextInt();
напечатано 2019-5-6
и "Didn't found a same date."
- 3-я попытка: я снова поместил значение 3 в
scanner.nextInt();
На нем напечатано 2019-5-3
и "Didn't found a same date."
Я ожидал получить сообщение "Найдена та же дата".
Вам нужно вставить flight
, если theDay
истинно, когда дата отправления уже не совпадает.
if (theDay){
flightList.add(flight);
System.out.println("Didn't found a same day.");
}else{
System.out.println("A same date found");
}
Когда вы будете готовы двигаться вперед, вы можете использовать Set<Flight>
с правильной реализацией эквивалентности
Вам никогда не потребуется проверять себя, если уже существует «эквивалентный» экземпляр, Set
сделает это за вас.
Все, что вам нужно, это правильно реализовать equals
и hashCode
, и ваш код будет просто выглядеть так:
Set<Flight> flights = new HashSet<>();
Scanner sc = new Scanner(System.in);
for(int i = 0; i < 5; ++i){
Flight f = new Flight();
f.setDeparture(LocalDate.of(2019, Month.MAY, sc.nextInt()));
if(flights.add(f)){
System.out.println("New flight added");
} else {
System.out.println("Flight already booked");
}
}
sc.close();
И чтобы дать вам представление, вот сгенерированные методы eclipse для простого класса
class Flight {
LocalDate departure;
public void setDeparture(LocalDate departure) {
this.departure = departure;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((departure == null) ? 0 : departure.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Flight other = (Flight) obj;
if (departure == null) {
if (other.departure != null)
return false;
} else if (!departure.equals(other.departure))
return false;
return true;
}
}