当前位置:文档之家› 电梯算法

电梯算法

for (int i = 0; i < waitlist.size(); i++) {//将waitlist中的值添加至list表中
io io = (io) waitlist.get(i);
io io1 = new io();
io1.setCourse(io.getCourse());
io1.setCylinder(io.getCylinder());
static String course = "Null";//定义静态值存放进程名
static int cylinder = 0;//定义静态值存放柱面位置
static int track = 0;//定义静态值存放磁道位置
static int record = 0;//定义静态值存放物理记录位置
p = i;
}
}
}
}
if (p == 0 && list.size() >= 1) {//若找到比当前值小的元素,进行list表中对应元素的删除并继续
io io = (io) list1.get(p);
int a, b, c;
a = io.getCylinder() - cylinder;
b = io.getTrack() - track;
io.setRecord(sc.nextInt());
list.add(io);
}
public void Scheduling() {
ArrayList<io> list1 = (ArrayList<io>) list.clone();
ArrayList<io> list2 = (ArrayList<io>) list.clone();
System.out.println("输入进程名柱面号磁道号物理记录号");
io.setCourse(sc.next());
io.setCylinder(sc.nextInt());
io.setTrack(sc.nextInt());
io.setRecord(sc.nextInt());
if ("up".equals(side)) {//摆臂方向为up时,当输入值小于当前操作数的值时,不加入list进行比较而是存放进waitlist中等待
DiskDispatchArithmetic ds = new DiskDispatchArithmetic();
Scanner sc = new Scanner(System.in);
System.out.println("输入随机数:");
//double i = Math.random();
//int i = 1;
if (a != 0) {//若比较得到当前柱面号与下一个准备操作进程柱面号不同,则按照side方向寻找适合值
System.out.println("即将调度的进度不在此柱面号中,按照" + side + "方向寻找适配进度");
}
if (a == 0 && b != 0) {//若比较得到当前磁道号与下一个准备操作进程磁道号不同,则按照side方向寻找适合值
Collections.sort(list1, comparator);//调用从小到大排序进行排序
System.out.println("当前io表:");
System.out.println("进程名" + " " + "柱面号" + " " + "磁道号" + " " + "物理记录号");
for (int i = 0; i < list2.size(); i++) {//打印当前io表
}
course = io.getCourse();
cylinder = io.getCylinder();
track = io.getTrack();
record = io.getRecord();
ut.println("将要调度的进程:");
System.out.println("进程名" + " " + "柱面号" + " " + "磁道号" + " " + "物理记录号");
c = io.getRecord() - record;
System.out.println("当前所指向进程:");
System.out.println("进程名" + " " + "柱面号" + " " + "磁道号" + " " + "物理记录号");
System.out.println(course + " " + cylinder + " " + track + " " + record);
flag = 1;
} else {
flag = 0;
}
}
if (flag == 1) {
return true;
} else {
return false;
}
}
public void Request() {//运行后添加io表的元素
io io = new io();
Scanner sc = new Scanner(System.in);
System.out.println("当前所指向进程:");
System.out.println(cylinder + " " + track + " " + record);
side = "down";
System.out.println("由于没有比当前所指向进程更大的进程,移动方向改变,为" + side);
//int i=0;
int i = sc.nextInt();
if (list.isEmpty() && waitlist.isEmpty()) {
System.out.println("当前io表为空,等待输入");
ds.toContinue();
}else{
if (i >= 0.5) {
System.out.println("随机数为" + i + "大于0.5,执行驱动调度");
if (io.getCylinder() < cylinder) {
if (io.getTrack() < track) {
if (io.getRecord() < record) {
waitlist.add(io);
}
}
} else {
list.add(io);
}
}
if ("down".equals(side)) {//摆臂方向为down时,当输入值大于当前操作数的值时,不加入list进行比较而是存放进waitlist中等待
ds.Scheduling();
} else {
System.out.println("随机数为" + i + "小于0.5,执行接受请求");
ds.Request();
}
}
}
public boolean isHave(int a, int b, int c) {
ArrayList<io> list1 = (ArrayList<io>) list.clone();
int fcylinder = cylinder;//当前所在的柱面
int ftrack = track;//当前所在的磁道
int frecord = record;//当前所在的物理记录
if ("up".equals(side)) {//判断side方向为up时执行
ComparatorIo comparator = new ComparatorIo();
ComparatorIoTurn comparator = new ComparatorIoTurn();
Collections.sort(list1, comparator);
io1.setTrack(io.getTrack());
io1.setRecord(io.getRecord());
list.add(io1);
}
waitlist.clear();//清空waitlist
}
toContinue();
}
if ("down".equals(side)) {//当side为down,则进行从大到小排序,流程同上
for (int i = 0; i < list1.size(); i++) {//通过比较找到下一个准备操作的元素
io io = (io) list1.get(i);
if (fcylinder > io.getCylinder()) {
相关主题