Java do while循环-仅循环两次-应循环8次

Java do while循环-仅循环两次-应循环8次,java,Java,这个循环只循环了两次 int currentPosition = 10; int nextPosition; do { nextPosition = currentPosition + 1; sectionSem[nextPosition].P(); // wait for the section ahead to be // free

这个循环只循环了两次

    int currentPosition = 10;
    int nextPosition;
    do
    {
        nextPosition = currentPosition + 1;
        sectionSem[nextPosition].P(); // wait for the section ahead to be
                                        // free
        trackSections[nextPosition] = "[A" + trainName + "]"; // move
                                                                // forward
        trackSections[currentPosition] = "[..]"; // clear section vacated
        // record the train activity
        theTrainActivity.addMovedTo(nextPosition);
        sectionSem[currentPosition].V(); // signal the section you vacated
                                            // now free
        currentPosition += 1;
    } while (currentPosition < 18);
int currentPosition=10;
int nextPosition;
做
{
下一个位置=当前位置+1;
sectionSem[nextPosition].P();//等待前面的节被删除
//免费的
轨道区段[nextPosition]=“[A”+列车名+”];//移动
//前进
轨道区段[currentPosition]=“[…]”;//清除空出的区段
//记录列车活动
TrainActivity.addMovedTo(下一个位置);
sectionSem[currentPosition].V();//向您腾出的节发送信号
//现在自由了
当前位置+=1;
}而(当前位置<18);

知道为什么吗?它应该循环8次

代码中的错误就在这里的某个地方:

    sectionSem[nextPosition].P(); // wait for the section ahead to be
                                    // free
    trackSections[nextPosition] = "[A" + trainName + "]"; // move
                                                            // forward
    trackSections[currentPosition] = "[..]"; // clear section vacated
    // record the train activity
    theTrainActivity.addMovedTo(nextPosition);
    sectionSem[currentPosition].V(); // signal the section you vacated
                                        // now free
如果将循环归结为以下内容:

public static void main(String []args){
        int currentPosition = 10;
        int nextPosition;
        do
        {
            nextPosition = currentPosition + 1;         
            System.out.println("nextPosition = " + currentPosition);
            currentPosition += 1;
            System.out.println("currentPosition = " + currentPosition);
        } while (currentPosition < 18);
     }

是什么让您认为它只循环了两次?您发布的代码中没有任何内容会导致循环在两次迭代后终止,尽管有可能某个循环体行调用的某个内容正在执行某些操作。请提供更多信息。有例外吗?(只是胡乱猜测,但是
索引自动边界异常
可能是生成不希望的结果的原因)此外,您是否尝试过使用调试器?尝试添加以验证它只运行两次。
nextPosition = 10
currentPosition = 11
nextPosition = 11
currentPosition = 12
nextPosition = 12
currentPosition = 13
nextPosition = 13
currentPosition = 14
nextPosition = 14
currentPosition = 15
nextPosition = 15
currentPosition = 16
nextPosition = 16
currentPosition = 17
nextPosition = 17
currentPosition = 18