java - 如何调试与模拟客户线的队列有关的此错误?

标签 java

因此,我收到了一份客户列表及其到达时间,然后我将它们添加到队列中。我的程序是这样设置的,如果顾客到达,他/她就会被从队列中取出并放入第二个队列,然后会发生一堆其他事情。

员工服务时间恒定为5分钟或300秒,商店下午5点关门。因此,如果有人在 4:56 进来并且没有其他人在线,即使商店在 5 点关门,该人也会得到服务并处理完毕。其他可能在他之后到达的顾客也不会得到服务,即使他们排在 5 之前。

所以问题是,我的代码的重要部分仅在第一个队列不为空时运行。但从我给出的顾客名单来看,一个人在下午 4:56 进来,然后另外两个人分别在 4:58 和 4:59 进来,所以在 4:59 第一个队列是空的,然后我的重要代码块不再运行。

只需留下我的代码的相关部分即可。

if (eventqueue.isEmpty() == false) {
    if (eventqueue.peek().arrtimesecs == clock) {
        if (customerqueue.isEmpty() == true)
            eventqueue.peek().waitingtime = 0;
        customerqueue.enqueue(eventqueue.dequeue());

    // does stuff
    }
}

因此,如果我正在评估客户的代码部分以及不可以运行的部分可以运行,那么第一个 if 循环需要评估为 true,但是当最后一个人从队列中取出时,这部分不再运行。我该如何解决这个问题?

最佳答案

很难从提供的代码片段中看出,但听起来您需要像 servedLateCustomer 这样的 boolean 标志。最初它是假的。一旦您在 4:55 之后为某人服务,您就将其设置为 true。然后,您使用该标志作为条件的一部分(如果您已经为一位迟到的客户提供服务,则不要排队工作)。

一个“对 future 的想法”可以将其设为一个 int 计数器 lateCustomersServed,这样您就可以调整条件以允许处理一个或多个迟到者,而不仅仅是“0 或 1”

关于java - 如何调试与模拟客户线的队列有关的此错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43531718/

相关文章:

java - 在 VMware ESX 虚拟机上构建 Maven 期间性能缓慢

java - Android房间持久化: AppDatabase_Impl does not exist

java - 如何在java中制作线程安全的行矩阵

Java Swing 忽略 repaint()?

java - Eclipse null 分析对类文字发出 null 类型安全警告

java - Eclipse - 为什么 Tomcat 返回 404?

java - 为批量任务实现通用进度跟踪器

java - 如何让 Google Spreadsheet 的 "CellFeed"也返回空白单元格(使用 Java)?

java - 如何修复 Hibernate "object references an unsaved transient instance - save the transient instance before flushing"错误

java - 为什么 java.nio.file.DirectoryStream 使用无限泛型?