【问题标题】:C# first fit Algorithm outputC#首次拟合算法输出
【发布时间】:2014-03-10 14:39:58
【问题描述】:

我被分配了一个家庭作业来编写 first-fit 算法,这意味着根据 first-Fit 算法将一组作业分配给一组内存块。到目前为止,我的算法可以正确地工作和分配工作;但是,我的问题是当我的排队作业输出到控制台时,我的循环不会遍历所有发送到队列的作业,它只显示发送到队列的初始作业及其大小,直到所有要发送的作业to queue 已被迭代。

这可能很简单,但我似乎无法弄清楚......还有什么需要的,只要问我就可以提供。谢谢。

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 被发送到等待队列!

【问题讨论】:

  • 一些代码会有所帮助...
  • 你能提供一些代码示例吗?
  • 在黑暗中拍摄...这是否显示了 10 个工作会发生什么?例如,最后两行“Job 8 ...”实际上应该是Job 9Job 10?检查遍历队列中作业的代码,并确保您的控制变量正在递增,并且您正在使用该控制变量来获取正确的作业。另外,在调试时,检查您的队列是否确实有 Job 9 和 Job 10。您是否可以将 Job 8 插入 3 次。
  • 是的,应该是 10 个工作,最后 2 个工作应该是工作 9 和工作 10,有自己的尺寸....出于某种原因,这让我从昨天开始就卡住了 >.

标签: c# algorithm for-loop output


【解决方案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;

??

【讨论】:

  • 这几乎是问题所在,每次输出相同的值....我最终以与您提出的方式略有不同的方式解决了该问题,但无法在 8 内回答我自己的问题问了几个小时。
【解决方案2】:

已排序。感谢 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!";


 }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 2020-10-10
    • 2021-11-11
    • 2016-06-11
    • 2012-07-28
    相关资源
    最近更新 更多