我的任务是创建一个银行的模拟。到目前为止,我所做的进展是生成随机客户端对象,制作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类,那里没有错误。我有什么想法可以解决这个问题。
答案 0 :(得分:2)
为什么它只执行5次?根据代码,counter
用于检查是否应该继续循环。 counter
更改的唯一实例位于最后一行:counter++
。
我可以猜到你在柜台上做了System.out.print
,最终结果为5,它神奇地停了下来。很可能是它抛出了一个异常,它没有被捕获,并且在虚空中丢失了。
编辑:如果这段代码正在另一个线程上运行,那么它可能会挂起一些函数。做told here
答案 1 :(得分:0)
尝试找到循环转向无限循环的位置,
尝试在必要时编写打印语句,以便找到执行流程。
然后打印出你的变量值,同时检查它们是否符合预期,继续缩小你的范围,因为你发现在某个范围内发生了错误,那么你会找到罪魁祸首,如果它引导你到其他一些功能,那么彻底检查那个特定的功能。