虽然条件仍然成立,但循环不会继续

时间:2016-11-26 15:50:24

标签: java while-loop

我的任务是创建一个银行的模拟。到目前为止,我所做的进展是生成随机客户端对象,制作4个Teller对象,将Client对象放入循环队列,并将Client放入空的Teller(如果有)。

我现在遇到的问题是,即使设置条件仍然为真,我制作的while循环也没有继续,它只能执行5次。该计划仍在运行。

这是我到目前为止的代码(假设声明了所有变量):

public void run() {
    int counter = 1;
    populateTellers(windowArray);
    while (counter < 10) {
        newClient = generateClient();

        System.out.println(newClient.toString() + " arrived at :" + counter);
        System.out.println();

        clientQueue.enqueue(newClient);
        clientList.add(newClient);
        System.out.println("The Queue now contains " + clientQueue.numberOfOccupiedCells() + " Client(s):");
        for (int x = 0; x < clientList.size(); x++) {
            System.out.println(clientList.get(x).toString());
        }
        System.out.println();

        arrayIndex = getATeller(windowArray);
        if (arrayIndex != -1) {
            clientList.remove(0);
            clientQueue.dequeue();
            windowArray[arrayIndex].setClient(newClient);
            windowArray[arrayIndex].setServiceTime(newClient.getDuration());
            System.out.println(windowArray[arrayIndex].getName() + " now serves " + newClient.toString());
        } else {
            for (int x = 0; x < clientList.size(); x++) {
                if (windowArrray[arrayIndex].getServiceTime() == counter) {
                    windowArray[arrayIndex].setClient(new Client());
                    System.out.println(windowArray[arrayIndex].getName() + " ends service for " + newClient.toString());
                }
            }
        }
        counter++;
    }
}

我无法理解的一件事是,当我从aI = getATeller(wA);&#39;中删除代码,直到其下方的if语句的结束括号时,该程序将起作用。我已尝试将块放入方法中,更改if(){}和else {}内部代码的位置,并将条件更改为if(aI==1),但仍未得到任何改进。关于我做错了什么的任何想法?

编辑:所以我已经能够将其缩小到windowArray[arrayIndex].setServiceTime(newClient.getDuration());的代码行,每当我为Teller的服务时间分配值时,问题就会发生,I& #39; ve检查了我的Teller类,那里没有错误。我有什么想法可以解决这个问题。

2 个答案:

答案 0 :(得分:2)

为什么它只执行5次?根据代码,counter用于检查是否应该继续循环。 counter更改的唯一实例位于最后一行:counter++

我可以猜到你在柜台上做了System.out.print,最终结果为5,它神奇地停了下来。很可能是它抛出了一个异常,它没有被捕获,并且在虚空中丢失了。

编辑:如果这段代码正在另一个线程上运行,那么它可能会挂起一些函数。做told here

答案 1 :(得分:0)

尝试找到循环转向无限循环的位置,

尝试在必要时编写打印语句,以便找到执行流程。

然后打印出你的变量值,同时检查它们是否符合预期,继续缩小你的范围,因为你发现在某个范围内发生了错误,那么你会找到罪魁祸首,如果它引导你到其他一些功能,那么彻底检查那个特定的功能。