【发布时间】:2015-12-19 02:46:47
【问题描述】:
我正在为一个有工作的学校项目(一个 int 数组)工作,我是 Java 新手,在尝试将这些工作放入队列时遇到了一个奇怪的错误。
我的问题是,一旦我已经在队列中有一个元素,下一个元素将替换队列中的前一个元素,
即如果Queue[0] 持有arr1,并且我添加下一个元素( Queue.add(arr2)),则将arr 2 添加到Queue[1] 但队列也将Queue[0] 替换为arr2。
有很多代码,所以我只发布了我正在使用的以及调用它的函数的位置,一旦执行 .add 就会发生元素更改。
public class drumQueue {
private Queue<int[]> myQueue = new LinkedList<int[]>();
private static boolean drumIsBusy = false;
int index=0;
public void add(int[] p){
myQueue.add(p);
}
public void remove(){
myQueue.remove();
}
public int[] getP(){
System.out.println("POPED!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
return myQueue.poll();
}
public boolean isDrumIsBusy() {
return drumIsBusy;
}
public void setDrumIsBusy(boolean drumIsBusy) {
drumQueue.drumIsBusy = drumIsBusy;
}
public void print(){
for( int i =0 ;i < myQueue.size(); i++ ){
System.out.println(myQueue.peek()[1]+ "ELEMENT!!!!!!!!!!!!!!!");
}
}
public int size(){
return myQueue.size();
}
}
在不同的类中使用上述类的方法。
private static void MemeoryManager(int[] a, int[] p) {
// TODO Auto-generated method stub
memoryLink.freeSpaceTableBuilder();
memoryLink.freeSpaceTableBuilder();
p[2] = memoryLink.addressFinder(p[3]);
memoryLink.addTooMemory(p[2],p[3],p[1]);
memoryLink.merge();
drumQueue.add(p);
Swap(a,0);
}
【问题讨论】:
-
您需要创建并发布一个有效的minimal reproducible example(请在回复前阅读链接)。
-
为什么
boolean drumIsBusy是静态的? -
为什么你似乎在
drumQueue类上调用 add 方法,而不是实例?请注意,顺便说一句,您将需要学习和使用Java naming conventions。变量名应全部以小写字母开头,而类名应以大写字母开头。学习这一点并遵循这一点将使我们更好地理解您的代码,并使您更好地理解他人的代码。 -
用
memoryLink显示所有代码的目的是什么?它与您的问题有什么关系?