Sam*_* kh 3 java scheduling arraylist round-robin
我正在制作一个cpu调度模拟器(用于学校项目).我的功能有问题roundRobin
.当我这样做c.get(i).jobTime -= 2;
,c.get(i).jobTime -= 1;
它影响我的其他ArrayList
s,所以我不能做我的其他功能.在我打电话之前roundRobin2
我的名单是完全正常的.为什么会这样?
例如,这就是我的list4
样子roundRobin2
list 4: [Job101 0, Job102 0, Job103 0, Job104 0, Job105 0, Job106 0]
这就是我在文件中读取的方式,并将Jobs
对象放入我ArrayList
的文件中.
Scanner input = new Scanner(new File("testdata1.txt"));
ArrayList<Jobs> list = new ArrayList<Jobs>();
ArrayList<Jobs> list2 = new ArrayList<Jobs>();
ArrayList<Jobs> list3 = new ArrayList<Jobs>();
ArrayList<Jobs> list4 = new ArrayList<Jobs>();
Jobs first;
while(input.hasNext())
{
first = new Jobs(input.next(), input.nextInt());
list.add(first);
list2.add(first);
list3.add(first);
list4.add(first);
}
input.close();
Run Code Online (Sandbox Code Playgroud)
这是我的 roundRobin2
public void roundRobin2(ArrayList<Jobs> c, int sT)
{
int size = c.size();
int cT = 0;
int ccT = 0;
while(!c.isEmpty())
{
int i = 0;
System.out.println(c);
for(i = 0; i < size; i++)
{
if((c.get(i).jobTime) >= 2)
{
c.get(i).jobTime -= 2;
cT += 2;
if((c.get(i).jobTime) == 0)
{
ccT += cT;
}
}
else
{
(c.get(i).jobTime) -= 1;
cT += 1;
if((c.get(i).jobTime) == 0)
{
ccT += cT;
}
}
}
for(i = 0; i < size; i++)
{
if((c.get(i).jobTime) == 0)
{
c.remove(i);
size = c.size();
}
}
}
System.out.println("\nAverage completion times: " + ccT + "/" + sT + " = " + ((ccT)/sT));
}
Run Code Online (Sandbox Code Playgroud)
And*_*own 12
在每次迭代中,您只创建一个对象并将其添加到所有4个列表中.当你改变那个对象时,你可以改变它.该突变将反映在所有列表中,因为它们都存储相同的对象引用.
while(input.hasNext())
{
first = new Jobs(input.next(), input.nextInt());
list.add(first);
list2.add(first);
list3.add(first);
list4.add(first);
}
Run Code Online (Sandbox Code Playgroud)
相反,您需要为每个列表添加一个新的对象引用(如果您希望将对象的克隆存储在每个列表中).
while(input.hasNext())
{
String s = input.next();
int i = input.nextInt();
list.add(new Jobs(s, i));
list2.add(new Jobs(s, i));
list3.add(new Jobs(s, i));
list4.add(new Jobs(s, i));
}
Run Code Online (Sandbox Code Playgroud)
在第一个代码中,样本list.get(n) == list2.get(n)
将是true
(对于任何有效的n
和您的4中的任何两个列表都是如此).在第二个示例中false
,您将拥有完全不相关的对象,这些对象恰好会在添加到列表中时存储相同的值.
归档时间: |
|
查看次数: |
1292 次 |
最近记录: |