gpt4 book ai didi

java - 后值在循环数组队列中无法正常工作

转载 作者:行者123 更新时间:2023-12-01 15:42:53 27 4
gpt4 key购买 nike

我有这个代码用于添加:

public void add(AnyType item){
if(isEmpty()){
q[f]=item;
}
else{
if(size==q.length){
AnyType[] copyQ = (AnyType[]) new Object[q.length*2];
System.arraycopy(q, f, copyQ, 0, q.length-f);
System.arraycopy(q, 0, copyQ, q.length-f, r);
f = 0;
q = copyQ;
}
}
q[r]=item;
r = (r+1)%(q.length);
size++;
}

但是当我想获取 r 的值时,它给了我比实际值多一个的值。另外,当我将值从一个数组复制到另一个数组时,有一个值正在跳过一个值。我知道一切都与 r = (r+1)%(q.length); 的值有关,我已经研究了几个小时但无法弄清楚。将值分配给 q[r] 后,即使它只是第一个值,并且我尝试获取 r 应该在哪里的值,它也会给我 1,因为它是通过公式增加的,但我无法弄清楚如何以不同的方式编写它而不弄乱循环队列公式。任何帮助将不胜感激。谢谢!

最佳答案

单元测试是你的 friend ! :-)

将您想要的行为表达为测试,逐渐增加 add() 方法的复杂性,直到一切正常。我为你的循环缓冲区做了这个,工作的 add() 看起来像这样:

public void add(AnyType item){
if(isEmpty()){
q[f]=item;
}
else {
if (size == q.length) {
AnyType[] copyQ = (AnyType[]) new Object[q.length*2];
System.arraycopy(q, f, copyQ, 0, q.length-f);
System.arraycopy(q, 0, copyQ, q.length-f, (r + 1));
f = 0;
r = q.length -1;
q = copyQ;
}
}

r = (r+1)%(q.length);
q[r]=item;
size++;
}

注意差异:

  • r 是一个偏移量 - 您不能将其用作第二个 arraycopy()
  • 中的长度
  • r 需要在调整内部数组大小时更新
  • 更改了计算顺序,在存储 item 之前递增 r

关于java - 后值在循环数组队列中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7733454/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com