从同一个Object打印单独的String

时间:2015-01-30 19:40:45

标签: java

我问了这个问题,但我说的方式被认为是重复的,不相似。我正在尝试为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();


}

}

1 个答案:

答案 0 :(得分:4)

确定。

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));
}

您正在使用addFlight()和其他人使用add()向您的Airport添加一些airport个对象。您使用addFlight()添加的内容没有容量值,使用add()的内容没有destdep。你有看到?简单地使用相同的planeId制作两个条目不会将它们组合在你的arraylist中。当您尝试打印时,根据您添加Airport对象的方式,某些值将为null。

编辑: 我能想到的一个解决方案,尽可能少地改变你的代码 -

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()函数。这样,您就可以将所有相关字段填入一个条目中。

当然,一个更好的想法是完全重构你的课程,但这应该有效。