【问题标题】:How to print out planes by airline如何按航空公司打印飞机
【发布时间】:2012-12-10 22:06:55
【问题描述】:

嘿,我使用字符串和航班的哈希图创建了一个名为 planeStore 的航班存储。所以然后我也使用哈希图制作了另一家商店(航空公司商店)。我将planeStore 放入AirlineStore。但是我不能让航空公司和飞机一起打印出来。

我想通过将字符串航空公司名称放入航空公司构造函数中。并在创建航空公司时传入“飞机名称”航空公司=新航空公司(“飞机名称”);这会起作用,但它没有。

这是我的代码:

航空公司

import java.util.HashMap;


public class Airline 
{
    private String airlineName;
    private HashMap<String, PlaneStore> map;

    public Airline(String airlineName)
    {
        this.airlineName = "";
        map = new HashMap<String, PlaneStore>();
    }
    public void add(PlaneStore plane)
    {
        map.put(airlineName, plane);
    }
    public void remove(String flight)
    {
        map.remove(flight);
    }
    public void printPlane()
    {
        System.out.println("\n********Flight List********");
        for (PlaneStore plane: map.values()) {
             //System.out.println(plane);
            // class
            // or:
            System.out.println(airlineName);
            System.out.println(plane.toString());

        }

    }

}

plane.toString 是 PlaneStore 的 toString:

public String toString() {
        return "PlaneStore [airlineName=" + airlineName + ", planeMap="
                + planeMap + "]";
    }

主应用程序

import java.util.Scanner;


public class MainApp 
{
    private Scanner keyboard = new Scanner(System.in);
    public static void main(String[] args)
    {
        new MainApp().start();  
    }

    public void start()
    {
        Airline airline1 = new Airline("AerLingus");
        Airline airline2 = new Airline("Ryan Air");
        PlaneStore planeStore = new PlaneStore("Aer Lingus");
        PlaneStore planeStore2 = new PlaneStore("Ryan Air");

        Flight p1 = new Flight("Aer Lingus","A01", 150.5, 10.5, 500, Flight.AIRPLANETYPE.AIRBUS);
        Flight p2 = new Flight("Aer Lingus","B01", 50.3, 1.5, 91, Flight.AIRPLANETYPE.CORPORATE);
        Flight p3 = new Flight("Aer Lingus","C01", 12.2, -3.1, 56, Flight.AIRPLANETYPE.AIRBUS);


        Flight p4 = new Flight("Ryan Air","D01", 10.5, 1.5, 430, Flight.AIRPLANETYPE.PRIVATE);
        Flight p5 = new Flight("Ryan Air","E01", 0.3, 2.1, 101, Flight.AIRPLANETYPE.CORPORATE);
        Flight p6 = new Flight("Ryan Air","F01", 2.2, -3, 291, Flight.AIRPLANETYPE.AIRBUS);
        planeStore.add(p1);
        planeStore.add(p2);
        planeStore.add(p3);
        planeStore.print();

        airline1.add(planeStore);
        airline1.add(planeStore);
        airline1.add(planeStore);
        airline1.printPlane();

        planeStore2.add(p4);
        planeStore2.add(p5);
        planeStore2.add(p6);

        airline2.add(planeStore2);
        airline2.add(planeStore2);
        airline2.add(planeStore2);
        airline2.printPlane();



    }

}

【问题讨论】:

  • airlineName 是否曾分配给“”以外的任何其他名称?
  • 您似乎没有使用地图键。所以你应该使用 java.util.List 而不是 Map

标签: java hashmap


【解决方案1】:

您的 Airline 构造函数接收到 String 参数,但您没有将 Airline 类的实例变量 airlineName 分配给此参数。您只是将airlineName 设置为“”。

public Airline(String airlineName)
    {
        this.airlineName = "";
        map = new HashMap<String, PlaneStore>();
    }

你的意思是:

public Airline(String airlineName)
        {
            this.airlineName = airlineName;
            map = new HashMap<String, PlaneStore>();
        }

进一步查看您的代码,似乎每个Airline 类都有一个map,但您只需向该映射添加一个键以及值PlaneStore。因此,每个Airline 类上的每个map 似乎永远不会有两个或更多键。因此,使用map 没有意义,您可以使用ArrayList

如果我正确理解您的目标,您可以将您的 AirLine 课程简化为以下内容:

public class Airline 
{
    private String airlineName;                // Name of the company
    private ArrayList <PlaneStore> planeStore;

    public Airline(String airlineName)
    {
        this.airlineName = airlineName;
        map = new ArrayList<PlaneStore>();
    }
    public void add(PlaneStore plane){ planeStore.add(plane);}


    public void printPlane()
    {

        System.out.println(airlineName);
        System.out.println("\n********Flight List********");
        for (PlaneStore plane: planeStore)
        {
            System.out.println(plane.toString());
        }

    }

}

【讨论】:

    【解决方案2】:

    您正在将航空公司名称设置为“”,而不是您通过构造函数传递给它的字符串。

    【讨论】:

      【解决方案3】:

      一旦您将代码更改为this.airlineName = airlineName;,您应该可以接受这部分。

      顺便说一句,您添加的每架飞机看起来仍然使用相同的密钥。这将不断用新飞机覆盖您添加的最后一架飞机。如果您希望能够打印出所有的飞机,您需要给它们每一个唯一的钥匙。否则这是行不通的。

      【讨论】:

        猜你喜欢
        • 2017-10-13
        • 1970-01-01
        • 2015-04-08
        • 1970-01-01
        • 1970-01-01
        • 2022-11-16
        • 2018-07-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多