一小部分作业需要执行滑动窗口。换句话说,如果我的Message数组为[1、2、3、4、5、6、7、8、9、10等],则应根据大小填写窗口数组。 在下面的代码中,窗口大小被称为Max_Size。因此,假设我的Max_Size为2,则窗口应先填充[1、2],然后填充[3、4],然后填充[5、6],依此类推。 代码无法正确迭代(因此,如果我两次使用该命令,则会得到相同的内容),并且信息无法在两个数组之间正确传输。我已经很长时间没有编码了,因此欢迎您提供任何帮助。
`void fillWindow() {
ArrayList <Integer> temp = new ArrayList <> (data.size());
temp.addAll(data);
switch (Max_Size) {
case (1) :
for (int i = 0; i <= Max_Size; i++) {
Window.add(i, temp.get(i));
temp.remove(i);
next_S++;
}
break;
case (7) :
for (int i = 0; i <= Max_Size; i++) {
Window.add(i, temp.get(i));
next_S++;
if (Window.size() == Max_Size) {
for (int j = 0; j < 7; j++) {
temp.remove(j);
}
}
}
break;
case (127) :
for (int i = 0; i <= Max_Size; i++) {
Window.add(i, temp.get(i));
next_S++;
if (Window.size() == Max_Size) {
for (int j = 0; j < Max_Size; j++) {
temp.remove(j);
}
}
}
break;
}
System.out.println("Window Content = " + Window);
Window.clear();
}`
我的问题如下:首先,我无法使其正确迭代。换句话说,它每次都继续打印相同的内容。我的第二个问题是消息中的信息被错误地传输到窗口阵列。 因此,使用上面提到的示例,如果Max_Size = 7,而不是打印出[1,2,3,4,5,6,7],它将打印出类似[1,2,3,4,5,8,9 ]。所以我想我的问题如下:我做错了什么,如何解决?
更新
void fillWindow() {
ArrayList <Integer> temp = new ArrayList <> (data.size());
temp.addAll(data);
int count = 0;
while (count < Max_Size) {
Window.add(count, temp.get(count));
count++;
}
for (int i = 0; i < count; i++) {
temp.remove(i);
}
System.out.println("Window = " + Window);
Window.clear();
}
在阅读@Andreas的评论后,这就是我的想法。现在,代码可以正确迭代,但是当我在同一运行中两次使用fillWindow()时,它仍然继续显示相同的内容。 例如,当我执行以下操作时:
public static void main(String args[])
{
fillWindow();
fillWindow();
}
,预期答案是[1、2、3],然后是[4、5、6],但是我得到的却是[1、2、3]和[1、2、3]。正常吗?