を実行しているとき、私は怒鳴る見られるように、フライト情報を表示するプログラムを書いていません:プログラムが動作しますが、
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
この時点で復帰し、次にボストンとトロントになる次のフライトのためにハートをチェックしてください。ボストン・アウトゴーイングのフライトをチェックして、空港がトロントと接続しているかどうかを確認します...
私は新しいsop( "Ankushy")を追加すると、それは日食を使っている間に起こった。私の個人的な方法の1つでは、コンソールには表示されません。まず、新しく追加された行が含まれていない.classファイルを調べてから、プロジェクトをクリーンにして再構築してくれて、私のために働くので、java .classesの作業領域の出力場所を確認するように勧めました。 –
私はこのプロジェクトで使用されたクラスフォルダを完全に削除して、プロジェクトをクリーンアップしました...違いはありませんでした。 : – James
クラスAirportのequalsまたはhash関数をオーバーライドしましたか? –