Java 而循环不';即使条件仍然成立,也不能继续

Java 而循环不';即使条件仍然成立,也不能继续,java,while-loop,Java,While Loop,我的任务是创建一个模拟银行。到目前为止,我所取得的进展是生成随机客户端对象,生成4个Teller对象,将客户端对象放入循环队列,并将客户端放入空的Teller(如果有的话) 我现在的问题是,即使设置的条件仍然为真,我所做的while循环也不会继续,它只能执行5次。不过,该程序仍在运行 这是我到目前为止的代码(假设声明了所有变量): public void run(){ int计数器=1; populateTellers(windowArray); while(计数器

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

我现在的问题是,即使设置的条件仍然为真,我所做的while循环也不会继续,它只能执行5次。不过,该程序仍在运行

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

public void run(){
int计数器=1;
populateTellers(windowArray);
while(计数器<10){
newClient=generateClient();
System.out.println(newClient.toString()+”到达:“+计数器);
System.out.println();
clientQueue.enqueue(newClient);
clientList.add(newClient);
System.out.println(“队列现在包含“+clientQueue.numberOfOccupiedCells()+”客户端):”;
对于(int x=0;x
有一件事我无法理解,那就是当我从
aI=getATeller(wA)中删除代码时'直到它下面的if语句的结束括号,程序才能工作。我尝试将块放入一个方法中,更改if(){}和else{}中代码的位置,并将条件更改为
if(aI==1)
,但仍然没有得到任何改进。知道我做错了什么吗


编辑:所以我能够将它缩小到一行代码,即
windowArray[arrayIndex].setServiceTime(newClient.getDuration()),每当我给出纳员的服务时间赋值时,问题就会出现,我已经检查了出纳员类,那里没有错误。有没有办法解决这个问题。

试着找出你的循环在哪里变成了无限循环

在必要时,尝试编写打印语句,只是为了找到执行流程


然后打印出您的变量值,也检查它们是否如预期的那样,当您发现某个范围内发生错误时,继续缩小范围,然后您将找到罪魁祸首,如果它将您引向其他函数,那么请彻底检查该特定函数。

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

在必要时,尝试编写打印语句,只是为了找到执行流程


然后打印出您的变量值,也检查它们是否如预期的那样,当您发现某个范围内出现错误时,继续缩小范围,然后您将找到罪魁祸首,如果它导致您使用其他函数,则彻底检查该特定函数。

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

我猜你在计数器上做了一个
System.out.print
,结果是5,然后神奇地停止了。最有可能的是,它抛出了一个异常,该异常未被捕获,并在空白中丢失


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

执行为什么只执行5次?根据代码,
计数器
被用作检查是否应继续循环。更改
计数器
的唯一实例是最后一行:
计数器+++

我猜你在计数器上做了一个
System.out.print
,结果是5,然后神奇地停止了。最有可能的是,它抛出了一个异常,该异常未被捕获,并在空白中丢失


编辑:如果这段代码正在另一个线程上运行,那么它可能挂起了某个函数。“照做”循环不会切断它。使用线程和并行。您知道Java支持超过2个字符的变量名,对吗?因此,您可以为它们指定有意义的名称,并使您的代码易于理解。我的建议是重构代码,然后使用调试器逐步检查代码并找出发生了什么。这是线程的代码吗?如果这是线程,您应该知道线程在修改共享状态时可能会遇到的困难。@SergioMontoro不,这不是线程。循环不会切断它。使用线程和并行。您知道Java支持超过2个字符的变量名,对吗?因此,您可以为它们指定有意义的名称,并使您的代码易于理解。我的建议是重构代码,然后使用调试器逐步检查代码并找出发生了什么。这是线程的代码吗?如果这是线程,您应该知道线程在修改共享状态时可能会遇到的困难。@SergioMontoro不,它不是线程。为什么不使用调试器?为什么不使用调试器?
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++;
    }
}