做while循环 - 只有两次循环 - 应循环8次

问题描述:

这个循环只循环两次......做while循环 - 只有两次循环 - 应循环8次

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); 

任何想法,为什么?它应该循环8次?

+3

是什么让你觉得它只是循环两次? – Ghost

+1

你已经发布的代码中没有任何内容会导致循环在两次迭代后终止,尽管有可能被某个循环体行调用*做某事。请提供更多信息。 – aliteralmind

+1

任何异常? (只是一个疯狂的猜测,但一个'IndexOutOfBoundsException'可能是什么产生不想要的结果) – Barranka

错误在你的代码是介于浏览:

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); 
    } 

它运行的8倍。输出如下:

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