即使条件仍然成立,虽然循环不会继续
我的任务是创建银行模拟。到目前为止,我所取得的进展是生成随机的Client对象,使Teller的4个对象,将Client对象放入一个循环队列中,并将一个客户端放入一个空的Teller(如果有的话)。即使条件仍然成立,虽然循环不会继续
我现在的问题是我所做的while循环不会继续,即使设置条件仍然为true,它只能执行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);
删除代码“,直到程序将在其下面的if语句的结尾括号中起作用。我尝试将块放入方法中,改变if(){}和else {}中代码的位置,并将条件更改为if(aI==1)
,但我没有得到任何改进。任何想法我做错了什么?
编辑:所以我已经能够缩小到一行代码是windowArray[arrayIndex].setServiceTime(newClient.getDuration());
,只要我给出纳员的服务时间值问题会发生,我检查了我的柜员班,那里没有错误。任何想法如何我可以解决这个问题。
试图找到您的循环被转向无限循环,
试着写报表打印,只要有必要,只是为了寻找执行流程。
然后打印出你的变量值,检查它们是否如预期的一样,继续缩小范围,因为你发现在某个范围内发生了错误,那么你会发现罪魁祸首,如果它引导你到另一个函数,那么彻底检查特定的功能。
为什么不只是使用调试器? –
为什么它只执行5次?根据代码,counter
用于检查是否应该继续循环。 counter
更改的唯一情况是最后一行:counter++
。
我可以猜到,你在柜台上做了一个System.out.print
,它最终达到5,它神奇地停下来。最有可能的是抛出一个异常,这个异常没有被捕获,并且在虚空中丢失。
编辑:如果这段代码正在另一个线程上运行,那么它可能挂在某个函数上。做为told here
循环不会削减它。使用线程和并行。 –
你知道Java支持超过2个字符的变量名称,对吧?所以你可以给他们有意义的名字,并让你的代码可以理解。我的建议是重构代码,然后使用调试器来遍历代码并找出发生的情况。 –
这是线程的代码吗? –