将数组添加到 Java 中的队列(指针问题?)

Adding arrays to a Queue in Java (pointer issue?)

我正在读取传感器并希望获得一定数量的消息的平均值,因此我对它们求和,并且我正在使用队列在新测量值出现时从总和中删除第一个测量值已添加。

问题是队列没有像我预期的那样响应数组,它在某种程度上就像一个指针,所以当原始值更新时,历史记录也随之改变。

import java.util.Queue;
Queue<int[]> q = new LinkedList();
int[] t = new int[1];
int len = 3;
void setup() 
{
  for(int i=0;i<len;i++){
    t[0]=len-i;
    q.add(t);
  }
  for(int i=0;i<len;i++){
    print(q.remove()[0]);print(';');
  }
}

这段代码的结果是: 1;1;1;

虽然预期结果是: 3;2;1;

问题是,如何正确地将数组添加到队列?

您必须在 for 循环的每次迭代中实例化数组,否则它将被修改为相同的引用

Queue<int[]> q = new LinkedList();
int len = 3;

void setup() {
    for (int i = 0; i < len; i++) {
        int[] t = new int[1];
        t[0] = 5 - i;
        q.add(t);
    }

    for (int i = 0; i < len; i++) {
        print(q.remove()[0]);
        print(';');
    }
}