Java OOP:队列添加乘客失效及显示对象地址问题求助
解决队列打印乘客对象显示
airport.Passenger@xxxxxx的问题 嘿,这个问题我太熟了!你看到的airport.Passenger@55f96302其实不是队列添加功能失效——乘客已经成功加入队列了,只是Java默认的对象打印逻辑没输出你想要的信息而已。
问题根源
Java中所有类默认继承自Object类,而Object的toString()方法默认返回的是:
getClass().getName() + "@" + Integer.toHexString(hashCode())
也就是类的全限定名加上对象的哈希码值,所以你看到的是一串看似无意义的字符,而非乘客的具体信息。
解决方案:重写Passenger类的toString()方法
只需要在你的Passenger类中自定义toString()方法,把需要展示的乘客属性(比如姓名、航班号、座位号等)格式化输出即可。
举个示例代码:
package airport; // 对应你代码里的包名 public class Passenger { // 假设你的Passenger类有这些属性 private String passengerName; private String flightId; private String seatNumber; // 构造方法、getter/setter 这里省略,你应该已经实现了 // 重写toString()方法 @Override public String toString() { return String.format("乘客: %s | 航班: %s | 座位: %s", passengerName, flightId, seatNumber); } }
验证效果
当你再次打印队列时,无论是遍历队列逐个打印,还是直接打印队列对象,都会调用你重写的toString()方法,输出清晰的乘客信息:
// 示例主程序代码片段 Queue<Passenger> boardingQueue = new LinkedList<>(); boardingQueue.add(new Passenger("Alice", "MU5101", "22C")); boardingQueue.add(new Passenger("Bob", "MU5101", "22D")); // 打印队列 System.out.print("The queue: "); for (Passenger p : boardingQueue) { System.out.print(p + " "); }
输出结果会变成:
The queue: 乘客: Alice | 航班: MU5101 | 座位: 22C 乘客: Bob | 航班: MU5101 | 座位: 22D
如果是直接打印队列对象System.out.println("The queue: " + boardingQueue);,输出也会是格式化后的乘客列表,因为LinkedList的toString()会自动遍历每个元素并调用其toString()方法。
内容的提问来源于stack exchange,提问作者Kimera
相关产品推荐
相关产品推荐

