在数据库中,我的表格包含每台计算机的machine_id
和burst_time
mach_id burst_time
1 3
2 2
3 1
4 2
5 4
我的循环算法代码是:
ResultSet rs = stmt1.executeQuery("select burst_time from virtual_machine WHERE VM_id <= '"
+ size + "'");
while (rs.next()) {
list22.add(rs.getString("burst_time"));
}
long[] bur = new long[list22.size()];
long[] rem = new long[list22.size()];
for (int i = 0; i < list22.size(); i++) {
SimpleDateFormat formatter1 = new SimpleDateFormat("HH:mm:ss");
formatter1.setTimeZone(TimeZone.getTimeZone("GMT"));
try {
java.util.Date d1 = formatter1.parse(list22.get(i));
long btm = d1.getTime();
rem[i] = bur[i] = btm;
} catch (java.text.ParseException e1) {
System.err.println("Error: " + e1.getMessage());
}
}
List<Integer> execOrder = new ArrayList<Integer>();
//for (long currTime = System.currentTimeMillis(); currTime <=currTime+ et1; currTime += 10 * 1000) {
do {
flagClounter = 0;
for (int i = 0; i < size; i++) {
if (rem[i] > 0) {
if (rem[i] > qtm) {
execOrder.add(i + 1);
rem[i] = rem[i] - qtm;
flagClounter++;
// Thread.sleep(40000);
} else {
execOrder.add(i + 1);
rem[i] = 0;
flagClounter++;
}
}
}
//flagClounter++;
} while (flagClounter > 0);
for (int i = 0; i < execOrder.size(); i++) {
System.out.println("\nVM " + execOrder.get(i));
}
这里循环概念工作正常......当time quantum = 2时,它会打印以下内容
1 2 3 4 5 1 5
但我想要的是打印精确的machine_id's
而不是存储在数组中的这些上面的整数值,它随循环递增..我怎样才能获得精确的machine_id&#39; s存储在数据库中以便在程序中使用,并在安排后以相同的上述形式打印它...任何人都可以帮助我如何把它放在程序中....
答案 0 :(得分:1)
rem
似乎是剩余突发时间的数组。如果它是一个对象数组,每个对象代表一台机器,你将拥有剩余的爆发时间和机器ID(以及你想要的任何其他东西)可用于打印。
您可以选择创建第二个数组,名称(例如)mid
,以便mid[i]
是与rem[i]
中跟踪时间的计算机关联的计算机ID。现在取代execOrder.add(i+1)
而不是execOrder.add(mid[i])
。
答案 1 :(得分:0)
您可以对代码进行以下更改:
Map<Integer, Integer> machine = new HashMap<Integer, Integer>();
//Map 'machine' will store each entry as machine_id, burst_time
ResultSet rs = stmt1.executeQuery("select burst_time, machine_id from virtual_machine WHERE VM_id <= '"+ size + "'");
while (rs.next()) {
machine.put(rs.getInt("machine_id"), rs.getInt("burst_time");
}
所有爆发时间都以机器ID为关键。这样您就可以打印相应的机器ID而不是突发时间。