C#首先拟合算法输出

时间:2014-03-10 14:39:58

标签: c# algorithm for-loop output

我已经完成了编写第一个拟合算法的作业分配,它意味着根据first-Fit算法将一定数量的作业分配给一定数量的内存块。到目前为止,我已经算法正常工作并正确分配作业;但是,我的问题是当我的排队作业输出到控制台时,我的循环不会遍历发送到队列的所有作业,它只显示发送到队列的初始作业及其大小,直到所有要发送的作业为止已经迭代了队列。

这可能很简单,但我似乎无法弄明白......其他任何事情只需要问我可以提供。谢谢。

public void firstFit(int counter, int JobIndex)
  {

 Counter = counter;
 jobIndex = JobIndex;

do {
        if (jobSize[jobIndex] > memorySize[Counter-1])
    {  
        Counter += 1;
    }
    else
    { 
    Console.Text += Environment.NewLine + "Job " + (jobIndex+1) + " of size " 
    + jobSize[jobIndex] + 
    " has been loaded into memory block:"
    + Counter;

    memorySize[Counter-1] = memorySize[Counter-1]-jobSize[jobIndex];

    Console.Text += Environment.NewLine + "The size of memory block " + Counter + " is now " + memorySize[Counter-1];

    Counter = 1;
    jobIndex += 1;
    }

}   while (Counter <= blocks && jobIndex < jobs);

for (int i = 0; i < jobs-jobIndex; i++ ){

jobQ = jobIndex;

if (jobQ < jobs)
{
    Console.Text += Environment.NewLine + "Job " + (jobQ+1) + " of size " + jobSize[jobQ] + " is sent to waiting queue!";


 }
}
  

大小为45的作业1已加载到内存块中:1大小为   内存块1现在是16

     

大小为1230的作业2已加载到内存块中:2大小为   内存块2现在是410

     

大小为325的作业3已加载到内存块中:2大小为   内存块2现在是85

     

大小为303的作业4已加载到内存块中:3大小为   内存块3现在是131

     

大小为1178的作业5已加载到内存块中:5大小为   存储块5现在是393

     

尺寸为1276的作业6已加载到内存块中:6大小为   存储块6现在是426

     

大小为965的作业7已加载到内存块中:7大小为   存储块7现在是322

     

大小为537的作业8被发送到等待队列!

     

大小为537的作业8被发送到等待队列!

     

大小为537的作业8被发送到等待队列!

2 个答案:

答案 0 :(得分:1)

最后有这段代码:

for (int i = 0; i < jobs-jobIndex; i++ )
{
    jobQ = jobIndex;
    if (jobQ < jobs)
    {
        Console.Text += Environment.NewLine + "Job " + (jobQ+1) + " of size " +
            jobSize[jobQ] + " is sent to waiting queue!";
    }
}

每次循环时jobQ的值都是相同的,所以当然每次都会打印相同的东西。您是否有可能将循环中的第一行读作:

jobQ = jobIndex + i;

...

答案 1 :(得分:0)

排序。谢谢Ryan指出我正确的方向。问题是我没有尝试获取进入队列所需的所有值的工作号,我只是得到jobQ + 1的工作号,这将永远是同一份工作,第一份工作是不合适。我的jobSize也一样。

这是我必须改变的代码:

 for (int i = 0; i < jobs-jobIndex; i++ ){
 jobQ = jobIndex;


if (jobQ < jobs)
 {
    Console.Text += Environment.NewLine + "Job " + (jobQ+(i+1)) + " of size " +  
    jobSize[jobQ+i]) + " is sent to waiting queue!";


 }
}