2016-12-30 116 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

为了清楚起见,用户正在输入爆发时间和到达时间的值,并将这些值保存到数组中。然后对每个阵列位置进行计算并在最后呈现给用户。 –