请帮忙检测一下这代码 循环不显示出来 不知道如何修改
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class BankQueue {
private static int counter = 1; // 叫号计数器
private static Queue<Customer> queue = new LinkedList<>(); // 等待队列
public static void main(String[] args) {
int numOfWindows; // 窗口数量
Scanner scanner = new Scanner(System.in);
System.out.println("请输入窗口数量:");
numOfWindows = scanner.nextInt();
for (int i = 0; i < numOfWindows; i++) {
new Windows(i + 1).start(); // 创建并启动窗口线程
}
new Display().start(); // 启动显示线程
new Server().start(); // 启动服务端线程
}
static class Customer {
private int number;
private String name;
private String type;
Customer(int number, String name, String type) {
this.number = number;
this.name = name;
this.type = type;
}
int getNumber() {
return number;
}
String getName() {
return name;
}
String getType() {
return type;
}
}
static class Windows extends Thread { // 窗口线程
private int id; // 窗口编号
private Customer currentCustomer; // 当前正在受理的客户
Windows(int id) {
this.id = id;
}
public void run() {
while (true) {
synchronized (queue) {
if (!queue.isEmpty()) { // 如果队列中有等待的客户
currentCustomer = queue.poll(); // 取出队首客户
System.out.printf("窗口 %d 正在为 %s(叫号:%d)办理业务:%s\n",
id, currentCustomer.getName(),
currentCustomer.getNumber(), currentCustomer.getType());
try {
Thread.sleep(5000); // 模拟业务处理时间
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.printf("窗口 %d 的 %s(叫号:%d)业务处理完毕\n",
id, currentCustomer.getName(), currentCustomer.getNumber());
currentCustomer = null; // 客户被服务完毕,当前没有客户
}
}
try {
Thread.sleep(1000); // 窗口轮询间隔
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
static class Display extends Thread { // 显示屏线程
public void run() {
while (true) {
synchronized (queue) {
if (!queue.isEmpty()) {
System.out.println("====== 当前排队情况 ======");
for (Customer customer : queue) {
System.out.printf("\t%-10s(叫号:%d)\n",
customer.getName(), customer.getNumber());
}
System.out.println("===========================");
}
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
static class Server extends Thread { // 排队机线程
public void run() {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入姓名:(退出请按 Q)");
String name = scanner.next();
if (name.equalsIgnoreCase("Q")) {
System.exit(0);
}
System.out.println("请输入业务:");
String type = scanner.next();
synchronized (queue) { // 将客户加入排队等待
queue.offer(new Customer(counter, name, type));
System.out.printf("\t%s 你好,你的叫号是:%d\n", name, counter++);
}
}
}
}
}
显示了吧, 哪里没显示?
方法名称 | 描述 |
---|---|
values() | 以数组形式返回枚举类型的所有成员 |
ordinal() | 获取枚举成员的索引位置 |
valueOf() | 将普通字符串转换为枚举实例 |
compareTo() | 比较两个枚举成员在定义时的顺序 |
enum EnumColor {
RED, BLACK, GREEN;
public static void main(String[] args) {
// 以数组的方式返回所有的枚举成员
EnumColor[] colors = EnumColor.values();
// 打印每个枚举成员的索引
for(int i = 0; i < colors.length; ++i){
System.out.println(colors[i] + ":" + colors[i].ordinal());
}
// 将字符串GREEN转化为枚举类型
EnumColor color1 = EnumColor.valueOf("GREEN");
System.out.println(color1);
// 在进行转换时,如果有对应的枚举类型则转换,否则抛出IllegalArgumentException
// EnumColor color2 = EnumColor.valueOf("YELLOW");//定义的枚举类没有YELLOW
// System.out.println(color2);
EnumColor color2 = EnumColor.valueOf("BLACK");//定义的枚举类没有YELLOW
System.out.println(color2);
System.out.println("-------------------------------------");
System.out.println("枚举实例的比较");
// 注意此处的比较是使用枚举成员的索引来比较了
EnumColor black = EnumColor.BLACK;
EnumColor red = EnumColor.RED;
System.out.println(black.compareTo(red));
System.out.println(BLACK.compareTo(RED));
System.out.println(RED.compareTo(BLACK));
}
//结果:
RED:0
BLACK:1
GREEN:2
GREEN
BLACK
-------------------------------------
枚举实例的比较
1
1
-1