5
当我正在写显示航班信息,波纹管看到一个节目:程序的工作,但不运行
package d.airlineData.engine;
import java.time.Duration;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map.Entry;
import a.airlineData.exceptions.NoFlightsException;
import c.airlineData.exceptions.NoAirportException;
import d.airlineData.graph.Airport;
import d.airlineData.graph.Flight;
import d.airlineData.graph.FlightGraph;
public class FlightGrapher {
private FlightGraph fg;
public FlightGrapher() throws NoFlightsException {
throw new NoFlightsException();
}
public FlightGrapher(ArrayList<Flight> flights) throws NoFlightsException {
fg = new FlightGraph();
for(Flight flight: flights) {
fg.addAirport(flight.getAirportA());
fg.addAirport(flight.getAirportB());
try {
fg.addFlight(flight);
} catch (NoAirportException e) {
System.err.println(e.getMessage());
e.printStackTrace();
}
}
}
public void printAll() {
HashSet<Airport> airports = fg.getAirports();
for(Airport airport : airports) {
System.out.println(airport + ":");
try {
Iterator<Flight> it = fg.getFlightsFor(airport);
while(it.hasNext()) {
System.out.println("\t" + it.next());
System.out.println();
}
} catch (NoAirportException e) {
System.err.println(e.getMessage() + " while attempting to get flights for " + airport);
e.printStackTrace();
}
}
}
public void printItinerary(Airport airportA, Airport airportB) {
System.out.println("Leg\tLeave\t\tAt\tOn\tArrive\tAt");
printItinerary(airportA,airportB, 1, 0.0, Duration.ofHours(0));
}
private void printItinerary(Airport airportA, Airport airportB, int leg, double totalPrice, Duration totalDuration) {
Iterator<Flight> aFlights = airportA.getOutgoingFlights();
System.err.println("Enters method printItinerary");
System.err.println("airportA " + airportA);
System.err.println("airportB " + airportB);
System.err.println("leg " + leg);
System.err.println("total price " + totalPrice);
System.err.println("Duration " + totalDuration.toMinutes() + "mins");
System.err.println();
while(aFlights.hasNext()) {
Flight currentFlight = aFlights.next();
System.err.println("Enters while of printItinerary currentFlight: ");
System.err.println(currentFlight);
if(currentFlight.getAirportB().equals(airportB)) {
System.out.println(leg + "\t" +
currentFlight.getAirportA() + "\t" +
currentFlight.getDepartureTime() + "\t" +
currentFlight.getFlightNumber() + "\t" +
currentFlight.getAirportB() + "\t" +
currentFlight.getArrivalTime());
System.out.println();
System.out.println("Total journey costs\t= £" + (currentFlight.getPrice() + totalPrice));
System.out.println("Total time in air\t= " + (currentFlight.getFlightDuration().plus(totalDuration)));
return;
}else {
System.err.println("enters else " + "currentFlight " + currentFlight.getAirportB() + " airport B " + airportB);
System.err.println();
if(hasAPath(currentFlight.getAirportB(), airportB)) {
System.out.println(leg + "\t" +
currentFlight.getAirportA() + "\t" +
currentFlight.getDepartureTime() + "\t" +
currentFlight.getFlightNumber() + "\t" +
currentFlight.getAirportB() + "\t" +
currentFlight.getArrivalTime());
printItinerary(currentFlight.getAirportB(), airportB, leg + 1,
(currentFlight.getPrice() + totalPrice),
(currentFlight.getFlightDuration().plus(totalDuration)));
}
}
}
}
private boolean hasAPath(Airport airportA, Airport airportB) {
System.err.println("Enters hasAPath with airportA " + airportA + " airportB " + airportB);
Iterator<Flight> aFlights = airportA.getOutgoingFlights();
while(aFlights.hasNext()) {
Flight currentFlight = aFlights.next();
System.err.println("Enters while of hasAPath currentFlight: ");
System.err.println(currentFlight);
if(currentFlight.getAirportB().equals(airportB)) {
System.err.println("returns true for airportA " + airportA + " airportB " + airportB);
return true;
}else {
System.err.println("Calls hasAPath with airportA " + currentFlight.getAirportB() + " airportB " + airportB);
return hasAPath(currentFlight.getAirportB(), airportB);
}
}
System.err.println("returns false for airportA " + airportA + " airportB " + airportB);
return false;
}
public static void main(String[] args) {
ArrayList<Flight> flights = new ArrayList<>();
HashMap<String, Airport> airports = new HashMap<>();
airports.put("Edinburgh", new Airport("Edinburgh"));
airports.put("Heathrow", new Airport("Heathrow"));
airports.put("Amsterdam", new Airport("Amsterdam"));
airports.put("Boston", new Airport("Boston"));
airports.put("Montreal", new Airport("Montreal"));
airports.put("Chicago", new Airport("Chicago"));
airports.put("Toronto", new Airport("Toronto"));
airports.put("New Delhi", new Airport("New Delhi"));
airports.put("Shanghai", new Airport("Shanghai"));
airports.put("Hong Kong", new Airport("Hong Kong"));
flights.add(new Flight(airports.get("Edinburgh"),airports.get("Heathrow"),
"B7982",LocalTime.of(22,10),LocalTime.of(23,15), 110.0));
flights.add(new Flight(airports.get("Heathrow"),airports.get("Amsterdam"),
"B7982",LocalTime.of(22,10),LocalTime.of(23,15), 100.0));
flights.add(new Flight(airports.get("Heathrow"),airports.get("Boston"),
"B7982",LocalTime.of(22,10),LocalTime.of(23,15), 230.0));
flights.add(new Flight(airports.get("Boston"),airports.get("Chicago"),
"B7982",LocalTime.of(22,10),LocalTime.of(23,15), 150.0));
flights.add(new Flight(airports.get("Boston"),airports.get("Montreal"),
"B7982",LocalTime.of(22,10),LocalTime.of(23,15), 100.0));
flights.add(new Flight(airports.get("Montreal"),airports.get("Toronto"),
"B7982",LocalTime.of(22,10),LocalTime.of(23,15), 90.0));
flights.add(new Flight(airports.get("Edinburgh"),airports.get("Chicago"),
"B7982",LocalTime.of(22,10),LocalTime.of(23,15), 560.0));
flights.add(new Flight(airports.get("New Delhi"),airports.get("Shanghai"),
"B7982",LocalTime.of(22,10),LocalTime.of(23,15), 430.0));
flights.add(new Flight(airports.get("Shanghai"),airports.get("Hong Kong"),
"B7982",LocalTime.of(22,10),LocalTime.of(23,15), 230.0));
Iterator<Entry<String,Airport>> airportIt = airports.entrySet().iterator();
while(airportIt.hasNext()) {
Entry<String, Airport> pair = airportIt.next();
Airport airport = pair.getValue();
for(Flight flight: flights) {
if(flight.getAirportA().equals(airport)) {
airport.addOutgoingFlight(flight);
}
}
}
try {
FlightGrapher fg = new FlightGrapher(flights);
//fg.printAll();
fg.printItinerary(airports.get("Edinburgh"), airports.get("Toronto")); // steps into this method
} catch (NoFlightsException e) {
System.err.println(e.getMessage() + " when trying to make a flight between a nonexistant airport");
e.printStackTrace();
}
}
}
我有使用该方法时的问题:
printItinerary(Airport airportA, Airport airportB, int leg, double totalPrice, Duration totalDuration)
它在正常运行时不会执行某些原因,但是当我使用调试器执行程序时,一切都会正常执行,并且我得到一个有意义的输出(格式不是很好,但我可以使用),为什么是这样发生了什么?
输出应该是这样的:
Leg Leave At On Arrive At
1 Edinburgh 10:30 BA345 Heathrow 11:30
2 Heathrow 14:00 BA657 Boston 15:30
3 Boston 18:00 AA652 Montreal 19:30
4 Montreal 22:00 AA216 Toronto 23:30
Total Journey Cost = £530
Total Time in the Air = 4 hrs 20 min
我得到这个,当我刚刚运行正常:
Leg Leave At On Arrive At
,这时候,我一步,但(或调试运行):
Leg Leave At On Arrive At
1 Edinburgh 22:10 B7982 Heathrow 23:15
2 Heathrow 22:10 B7982 Boston 23:15
3 Boston 22:10 B7982 Montreal 23:15
4 Montreal 22:10 B7982 Toronto 23:15
Total journey costs = £530.0
Total time in air = PT4H20M
步进虽然部分是我想要输出的(我将在后面的格式工作)
eddit:我添加了一堆的输出上的错误流,这里是输出当我运行它...出于某种原因停止在“hasAPath”的方法:
Leg Leave At On Arrive At
Enters method printItinerary
airportA Edinburgh
airportB Toronto
leg 1
total price 0.0
Duration 0mins
Enters while of printItinerary currentFlight:
Flight between Edinburgh & Chicago:
For: £560.0
Flight Number: B7982
Leaves at: 22:10
Arrives at: 23:15
Duration: 1hr 5min
enters else currentFlight Chicago airport B Toronto
Enters hasAPath with airportA Chicago airportB Toronto
returns false for airportA Chicago airportB Toronto
Enters while of printItinerary currentFlight:
Flight between Edinburgh & Heathrow:
For: £110.0
Flight Number: B7982
Leaves at: 22:10
Arrives at: 23:15
Duration: 1hr 5min
enters else currentFlight Heathrow airport B Toronto
Enters hasAPath with airportA Heathrow airportB Toronto
Enters while of hasAPath currentFlight:
Flight between Heathrow & Amsterdam:
For: £100.0
Flight Number: B7982
Leaves at: 22:10
Arrives at: 23:15
Duration: 1hr 5min
Calls hasAPath with airportA Amsterdam airportB Toronto
Enters hasAPath with airportA Amsterdam airportB Toronto
returns false for airportA Amsterdam airportB Toronto
在这一点它应该返回,然后检查hasAPath为下一个航班,这将是波士顿和多伦多,然后将检查所有Bostons出行航班,看看他们的机场是否与多伦多有连接...等等
它发生在我身上,而使用eclipse时,当我添加新的sop(“Ankushy”);在我的私人方法之一,它不在控制台上打印。首先,我查看了不包含新增行的.class文件,然后清理并重建项目,并为我工作,我建议您检查java .classes的工作空间输出位置。 –
我完全删除了这个项目中使用的类文件夹,然后去清理项目...没有什么区别。 :( – James
您是否覆盖了equals或机场类的哈希函数? –