无限循环,无法理解为什么

时间:2017-03-28 22:40:02

标签: java

我刚刚在我的大学开始学习编程,到目前为止我们正在与Java作斗争。我们的任务是模拟不同的处理器算法,如fcfs,sjf等。我尝试了很多方法,你看到的方法可能是最不优化的。我知道,这段代码可能不是最好的,也可能算法本身,但我想知道它是否按预期工作,我发现了一个问题,我无法理解一点太长了,我不能睡觉,直到我发现它有什么问题。

在下面的代码中,你会发现一个带有注释行的#top循环"为什么这个循环无法使用"用大写字母写的。我不知道为什么它永远不会停止(我运行了一些打印测试,我知道这是永远存在的循环)而且它真的让我感到紧张(很可能是因为解决方案现在非常简单)。

一些解释:我创建了一个进程列表,然后我执行了一些方法。过程描述为:执行时间(execTime);时间,它需要等待开始执行(waitTime);在什么时候准备执行(inTime)(但可能正在等待其他进程完成执行)和id。我通过减少它的execTime来执行进程直到它达到0,然后我删除了进程并为#34;新的第一个"执行相同的操作。这个减少的部分就是当程序进入无限时。

芒果

import java.util.ArrayList;
import java.util.List;

public class Processor {

List<Process> listOP = new ArrayList<Process>();
int processorTime = 0;
int totalWaitTime = 0;
int numberOfProcesses = 0;

public Processor(){
    for(int i=0; i<100; i++){
        listOP.add(new Process(i));
        if(i>0)
            listOP.get(i).inTime += listOP.get(i-1).inTime + (int)((Math.random() + 0.1)*10);
        System.out.println("Proces " + (listOP.get(i).id + 1) + " czas wejścia " + listOP.get(i).inTime);
    }
}

public double fcfs(){
    numberOfProcesses = listOP.size();
    while(listOP.size() != 0){
        if(listOP.get(0).inTime > processorTime){
            for(int i=0; i<listOP.size(); i++){
                listOP.get(i).waitTime = 0;
            }
        }
            totalWaitTime += listOP.get(0).waitTime;
            while(listOP.get(0).execTime != 0){//**WHY IS THIS LOOP INFINITE**
                for(int i=1; i<listOP.size(); i++){
                    if(processorTime == listOP.get(i).inTime)
                        listOP.get(i).waitTime++;
                }
                listOP.get(0).execTime--;
                processorTime++;
            }
            processorTime++;
        listOP.remove(0);
    }
    System.out.println(totalWaitTime);
    System.out.println(numberOfProcesses);
    System.out.println(processorTime);
    System.out.println("Średni czas tego ciągu procesów: " + totalWaitTime/numberOfProcesses);
    return totalWaitTime/numberOfProcesses;
}
}

0 个答案:

没有答案