滑动窗口:如何正确填充窗口? (JAVA / ArrayList + Array)

时间:2019-05-18 22:24:20

标签: java sliding-window

一小部分作业需要执行滑动窗口。换句话说,如果我的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]。正常吗?

0 个答案:

没有答案