2016-11-26 102 views
0

我的任务是创建银行模拟。到目前为止,我所取得的进展是生成随机的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());,只要我给出纳员的服务时间值问题会发生,我检查了我的柜员班,那里没有错误。任何想法如何我可以解决这个问题。

+0

循环不会削减它。使用线程和并行。 –

+2

你知道Java支持超过2个字符的变量名称,对吧?所以你可以给他们有意义的名字,并让你的代码可以理解。我的建议是重构代码,然后使用调试器来遍历代码并找出发生的情况。 –

+2

这是线程的代码吗? –

回答

0

试图找到您的循环被转向无限循环,

试着写报表打印,只要有必要,只是为了寻找执行流程。

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

+0

为什么不只是使用调试器? –

2

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

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

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