java超市购物结账队列模拟:设计程序模拟超市购物结账的场景。使用队列表示顾客排队,实现顾客入队、出队,以及结账的过程。考虑到不同顾客结账所需的时间不同。
时间: 2024-09-30 15:07:38 浏览: 12
在Java中模拟超市购物结账队列,我们可以创建一个`Customer`类表示顾客,包含姓名和结账时间属性。然后创建一个`Queue<Customer>`来存储顾客,可以使用`PriorityQueue`,因为结账时间需要按照从短到长排序。以下是简单的步骤:
1. **定义`Customer`类**:
```java
class Customer {
String name;
int checkoutTime;
// 构造函数
public Customer(String name, int checkoutTime) {
this.name = name;
this.checkoutTime = checkoutTime;
}
@Override
public String toString() {
return "Customer{" +
"name='" + name + '\'' +
", checkoutTime=" + checkoutTime +
'}';
}
}
```
2. **创建`CheckoutQueue`类**:
```java
import java.util.PriorityQueue;
public class CheckoutQueue {
private PriorityQueue<Customer> queue;
public CheckoutQueue() {
queue = new PriorityQueue<>((a, b) -> a.checkoutTime - b.checkoutTime);
}
// 入队方法
public void enqueue(Customer customer) {
queue.offer(customer);
}
// 出队并结账的方法
public void dequeueAndCheckOut() {
if (!queue.isEmpty()) {
System.out.println("Checking out " + queue.poll());
} else {
System.out.println("Queue is empty.");
}
}
// 检查队列是否为空
public boolean isEmpty() {
return queue.isEmpty();
}
}
```
在这个模型中,当有新顾客到来时,调用`enqueue`方法添加到队列中;当需要结账时,调用`dequeueAndCheckOut`会取出结账时间最短的顾客进行结算。