从同一对象打印单独的字符串



我问了这个问题,但我的措辞方式被认为是一个不相似的重复。我正在尝试为我的 printAllFlights 方法打印一个单独的字符串,该方法打印所有用户输入的信息。我的其他方法打印得很好。这是我试图实现的输出。

Choose action:
[1] Print planes
[2] Print flights
[3] Print plane info
[x] Quit
> 2
HA-LOL (42 ppl) (HEL-BAL)
HA-LOL (42 ppl) (BAL-HEL)

我的代码现在如何,我得到输出 null(0) (HEL-BAL)。如何更改它以反映正确的输出。任何帮助将不胜感激。

public class Airport {
private String planeId;
private int capacity;
private String dest;
private String dep;
public Airport(String planeId,int capacity){
    this.planeId= planeId;
    this.capacity = capacity;
}
public Airport(String planeId, String dep, String dest){
    this.dest= dest;
    this.dep= dep;
}
public String getPlaneId(){
    return this.planeId;
}
public void setPlaneId(String planeId){
    this.planeId = planeId;
}
public int getCapacity(){
    return this.capacity;
}
public void setCapacity(int capacity){
    this.capacity = capacity;
}
public String getDestination(){
    return this.dest;
}
public void setDestination(String dest){
    this.dest = dest;
}
public String getDeparture(){
    return this.dep;
}
public void setDeparture(String dep){
    this.dep = dep;
}
public String toString(){
    return planeId + " (" + capacity + ")";
}
public String secString(){
    return planeId + " (" + capacity + ")" + "(" + dest + "-" + dep;
}
}
import java.util.ArrayList;
public class FlightServices {
private ArrayList<Airport> airport;

public FlightServices() {
    airport = new ArrayList<Airport>();
}
public void add(String planeId, int capacity) {
    airport.add(new Airport(planeId, capacity));
}
public void addFlight(String planeId, String dest, String dep) {
    airport.add(new Airport(planeId, dest, dep));
}
public void printAllPlanes() {
    for (Airport all : airport) {
        System.out.println(all);
    }
}
public void printAllFlights() {
    for (Airport all : airport) {
        System.out.println(all.secString());
    }
}
public void printPlanesInfo(String planeId) {
    for (Airport info : airport) {
        if (planeId.equals(info.getPlaneId())) {
            System.out.println(info);
        }
    }
}
}
import java.util.Scanner;
public class UserInput {
private Scanner reader;
private FlightServices air;

public UserInput(Scanner reader, FlightServices air) {
    this.reader = reader;
    this.air = air;
}
public void start() {
    while (true) {
        System.out.println("Choose operation: ");
        System.out.println("[1] Add airplane");
        System.out.println("[2] Add flight");
        System.out.println("[3] Exit");
        int input = Integer.parseInt(reader.nextLine());
        if (input == 3) {
            break;
        } else if (input == 1) {
            this.addPlane();
        } else if (input == 2) {
            this.addFlight();
        }
    }
}
public void addPlane() {
    System.out.println("Give plane ID: ");
    String id = reader.nextLine();
    System.out.println("Give plane capacity: ");
    int capacity = Integer.parseInt(reader.nextLine());
    this.air.add(id, capacity);
}
public void addFlight() {
    System.out.println("Give plane ID: ");
    String id = reader.nextLine();
    System.out.println("Give departure airport code: ");
    String dep = reader.nextLine();
    System.out.println("Give destination airport code: ");
    String des = reader.nextLine();
    this.air.addFlight(id,dep,des);
}
public void printing() {
    while (true) {
        System.out.println("Choose operation: ");
        System.out.println("[1] Print planes");
        System.out.println("[2] Print flights");
        System.out.println("[3] Print plane info");
        System.out.println("[4] Quit");
        int command = Integer.parseInt(reader.nextLine());
        if (command == 4) {
            break;
        } else if (command == 1) {
            this.air.printAllPlanes();
        } else if (command == 2) {
            this.air.printAllFlights();
        } else if (command == 3) {
            this.addPlaneInfo();
        }
    }
}
public void addPlaneInfo() {
    System.out.println("Give plane ID: ");
    String id = reader.nextLine();
    this.air.printPlanesInfo(id);
}
}
import java.util.*;
public class Main {
public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);
    FlightServices air = new FlightServices();

    UserInput ui = new UserInput(reader,air);
    ui.start();
    System.out.println("Flight Service");
    System.out.println("----------");
    ui.printing();

}
}

好的。

public void add(String planeId, int capacity) {
    airport.add(new Airport(planeId, capacity));
}
public void addFlight(String planeId, String dest, String dep) {
    airport.add(new Airport(planeId, dest, dep));
}

您将一些Airport对象添加到airport中使用addFlight(),而其他对象则使用add()。使用 addFlight() 添加的没有容量值,使用 add() 添加的没有destdep。你明白吗?简单地使用相同的planeId创建两个条目不会将它们组合到数组列表中。当您尝试打印时,某些值将为 null,具体取决于您添加 Airport 对象的方式。

编辑:我能想到的一个解决方案,同时尽可能少地更改您的代码-

public void add(String planeId, int capacity) {
    int flag=0;
    for(Airport air:airport) {
       if(air.planeID.equals(planeID)) {
            air.capacity=capacity;
            flag=1;
       }
    }
    if(flag==0)
       airport.add(new Airport(planeId, capacity));
}

并类似地编辑您的 add() 函数。这样,您可以在一个条目中填写所有相关字段。

当然,一个更好的主意是完全重组你的类,但这应该有效。

最新更新