我已经在Main类中创建了一个Flight类型的ArrayList.Flight是一个包含LocalDate变量,getter和setter的类。在主要方面,我创建了一个布尔标志theDay并设置为true。当For循环找到与以前相同的LocalDate天值时,我希望此标志更改为false。 例如:
第一次尝试:我将值3放入了scanner.nextInt(); 它打印了2019-5-3和“找不到相同的日期。”
第二次尝试:我将值6放入了scan.nextInt();。 它打印了2019-5-6和“找不到相同的日期。”
第三次尝试:我再次将值3放入了scan.nextInt();。 它打印了2019-5-3和“找不到相同的日期”。 预计我会收到“找到相同日期”的消息。
public static void main(String[] args) {
ArrayList<Flight> flightList = new ArrayList<Flight>();
Scanner scanner = new Scanner(System.in);
int counter=1;
while (counter <= 3) {
Flight flight = new Flight();
System.out.println("Give the day of the departure.");
LocalDate day = LocalDate.of(2019, Month.MAY, scanner.nextInt());
flight.setDateOfDeparture(day);
System.out.println(flight.getDateOfDeparture());
boolean theDay = true; //Flag (reversed way in order to achieve the TRUE logic value).
for (Flight flight1 : flightList) {
System.out.println(flight1.getDateOfDeparture());
if (flight1.getDateOfDeparture().compareTo(flight.getDateOfDeparture()) == 0) {
theDay = false;
}
}
counter++;
if (theDay){
System.out.println("Didn't found a same day.");
}else
System.out.println("A same date found");
}
}
答案 0 :(得分:1)
您永远不会在列表中添加任何实例。 根据您的期望:
scanner.nextInt();
中,它分别打印了2019-5-3
和"Didn't found a same date."
scanner.nextInt();
中,它分别打印了2019-5-6
和"Didn't found a same date."
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;
}
}
答案 1 :(得分:1)
之所以会发生这种情况,是因为您没有将航班添加到flightList
中,因此航班始终为空。
更改代码,以在找不到if语句的日期时添加排期:
if (theDay){
System.out.println("Didn't found a same day.");
flightList.add(flight);
} else {
System.out.println("A same date found");
}