2016-12-30 114 views
-2

我試圖做while循環在C#爲什麼這個循環不會增加一個變量?

  • 我要執行的循環和減去從REMAININGTIME陣列量子和分配新值timeelapsed這涉及到做一個計算。
  • 我的循環應該執行,同時timeelapsed> 0,並停止一旦它擊中0

然而,循環不執行的 - 代碼的量子一部分,我不明白爲什麼。

static void Main(string[] args) 
    { 
     int quantum, noOfProcesses, processNumber = 0; // noOfprocesses variable is to determine array sizes, processNumber tells user what process number they input 
     int timeelapsed, count = 0; 

     Console.WriteLine("Please enter the number of processes:"); 

     noOfProcesses = Convert.ToInt32(Console.ReadLine()); // allows numerical input 
     int[] bursttime = new int[noOfProcesses]; 
     int[] arrivalTime = new int[noOfProcesses]; 
     int[] remainingTime = new int[noOfProcesses]; 

     for (int i = 0; i < noOfProcesses; i++) 
     { 
      Console.WriteLine("Enter Burst time for process #" + processNumber); 
      bursttime[i] = Convert.ToInt32(Console.ReadLine()); 
      processNumber++;  
     } 

     processNumber = 1; // resets the process number for user interface 

     for (int i = 0; i < noOfProcesses; i++) 
     { 
      Console.WriteLine("Enter arrival time for process #" + processNumber); 
      arrivalTime[i] = Convert.ToInt32(Console.ReadLine()); 
      processNumber++; 
     } 

     Console.WriteLine("Enter the time quantum:"); 
     quantum = Convert.ToInt32(Console.ReadLine()); // allows numerical input 

     // calculations 

     processNumber = 0; 


     if (count <= noOfProcesses) 
     { 
      // remainingTime[0] = bursttime[0] + arrivalTime[0]; // burst + arrival = remaining time 

      for (int i = 0; i < noOfProcesses; i++) 
      {   
       do 
       { 
        remainingTime[i] = bursttime[i] + arrivalTime[i]; // burst + arrival = remaining time 
        timeelapsed = remainingTime[i] - quantum; // - the quantum gives whats remaining 
        timeelapsed = timeelapsed - quantum; 
       } 
       while (timeelapsed > 0); 

       Console.WriteLine("#" + processNumber + " Time taken: " + timeelapsed + "ms"); 
       processNumber++; 
       count++; 
       //timeelapsed = bursttime[i] + arrivalTime[i]; 

      } 
     } 

     // Console.WriteLine(arrivalTime[j]); 
     Console.ReadLine(); 


    } 

請注意noOfProcesses和processNumber變量是在程序中定義的,我不相信這些會導致問題。

+3

您在發現問題的最佳位置。你有數據,你有代碼,你有調試器嗎? – Steve

+0

量子在其他地方還有定義嗎? –

+0

即使你不認爲他們導致問題,包括定義這些變量的代碼可能會有所幫助,所以我們可以看到完整的圖片。 –

回答

-1

如果沒有代碼在我面前,這真的很難調試和判斷。我假設'量子'代碼是循環的do部分中的部分。在這種情況下,爲什麼它沒有運行的唯一原因是三個中的一個:

  1. noOfProcesses小於1
  2. timeelapsed是< = 0
  3. 它是越來越到的第一次迭代循環但正在拋出異常。

由於您使用的是c#,並希望VS,你應該使用調試器,並通過你的程序。

+0

我不明白爲什麼這是倒票。我真的很想幫助OP,因爲很明顯他是一名初學者。答案是正確的...... – coolboyjules

+0

我不知道爲什麼無論你下樓投票,我感謝您的幫助,我現在已經更新了我的代碼的問題。 –

2

所有你做的這個循環一遍又一遍的重新計算相同的價值觀:

do { 
    remainingTime[i] = bursttime[i] + arrivalTime[i]; // burst + arrival = remaining time 
    timeelapsed = remainingTime[i] - quantum; // - the quantum gives whats remaining 
    timeelapsed = timeelapsed - quantum; 
} while (timeelapsed > 0); 

例如,您可能會看到這一點,如果你使用真正的數字:

do { 
    remainingTime = 100 + 100; 
    timeelapsed = 200 - 10 
    timeelapsed = 190 - 10; 
} while (timeelapsed > 0); 

環路永不結束。我不知道你的目標是什麼,但你可能需要保持運行總和,如:

remainingTime[i] += bursttime[i] + arrivalTime[i]; 

或者

remainingTime[i] -= bursttime[i] + arrivalTime[i]; 
+0

我試圖循環直到timeelapsed變量爲0或更少。然後我想要使用變量「i」移動到數組中的下一個位置,並重復此操作直到我到達數組的末尾。 –

+0

爲了清楚起見,用戶正在輸入爆發時間和到達時間的值,並將這些值保存到數組中。然後對每個陣列位置進行計算並在最後呈現給用戶。 –