【问题标题】:Console output not in order Java [duplicate]控制台输出不按Java顺序输出[重复]
【发布时间】:2020-03-01 06:41:05
【问题描述】:

我正在为剧院预订系统开发一个控制台应用程序,并将记录保存在一个文件中。当我尝试显示座位详细信息时,它以不同的顺序显示。我正在使用静态块来初始化数据。

public class WestBelcony extends Seat {

public final static double price = 40;

private static List<Seat> listSeat;

static {
    System.out.println("Here");
    listSeat = new ArrayList<Seat>();

    for (int i = 1; i <= 10; i++) {
        listSeat.add(new Seat().setId("wb" + i));
    }
}

public List<Seat> getListSeat() {
    return listSeat;
}

public void updateSeatBooking(String seatNo, boolean status ) {
    for (int i = 0; i < listSeat.size(); i++) {
        if (listSeat.get(i).getId().contains(seatNo)) {
            listSeat.get(i).setBooked(status);
        }
    }
}

public void getSeatDetails(String seatNo) {

    for (Seat seat : listSeat) {
        if (seat.getId().contains(seatNo)) {
            System.out.println("Seat Id : " + seat.getId() + " IsBooked : " + seat.isBooked());
        }
    }
}

public void showReservationDetails() {
    for (Seat seat : listSeat) {
        System.out.print("Seat No : " + seat.getId() + " ");
        if(!seat.isBooked()) {
            System.out.println("\u001B[32m"+"Available");
            System.out.print("\u001B[0m");
        } else {
            System.err.println("Booked");
        }
    }
}

public static Seat getSeat(String id) {
    for (Seat seat : listSeat) {
        if(seat.getId().contains(id))
            return seat;
    }
    return null;
}
}

这就是我调用方法的方式

WestBelcony eb = new WestBelcony();
wb.showReservationDetails();

这样显示

Seat No : wb1 Booked
BookedSeat No : wb2 Seat No : wb3 Seat No : wb4 Available
Seat No : wb5 Available
Seat No : wb6 Seat No : wb7 Available
Seat No : wb8 Available
Seat No : wb9 Available
Seat No : wb10 How many seats do you want to book?

Booked
Booked
Booked

这段代码有什么问题?

【问题讨论】:

  • 预期输出是什么?
  • 座位号:wb1 预定座位号:wb2 预定座位号:wb3 预定座位号:wb4 可用座位号:wb5 可用座位号:wb6 预定座位号:wb7 可用座位号:wb8 可用座位号: wb9 可用座位号 : wb10 已预订

标签: java eclipse console ansi


【解决方案1】:

我做了研究。 System.out.println() 是线程安全的,但 System.err.println() 不是。因此将 System.err 更改为 System.out 即可解决问题。

和 System.out.println("\u001B[32m"+"可用");这里 "\u001B[32m" 用于使用 ANSI 显示彩色字体。

"\u001B[32m" - 表示绿色

感谢支持

【讨论】:

    【解决方案2】:

    第一条评论就够了,

    但我建议你进入 Eclipse 的“调试模式”看看发生了什么。

    第 1 步:尝试通过单击“showReservationDetails”方法的左边框设置断点。

    第 2 步:尝试使用“调试”运行您的软件,该按钮位于正常的“运行”按钮旁边。

    第 3 步:尝试使用“F6”单步执行您的程序

    第 4 步:在调试期间使用鼠标指向变量值来查看变量值。

    这是您需要查看软件是否有问题的基本技能。 希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-18
      • 2014-12-12
      • 2016-09-15
      • 2012-09-28
      • 2013-07-05
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多