如何按照添加的顺序打印出ArrayList

时间:2015-05-14 09:32:26

标签: java arrays sorting arraylist

在整个程序中调用record()方法。所以如果用户输入 1,2,3,4,5,6,7。按顺序,它打印出7,6,5,4,3,2,1。我已经尝试过增强的for循环,forloops增量等等。请帮忙,在此先感谢。

ArrayList<Integer> playerMoves = new ArrayList<Integer>(20); 

    public void record(int value) {

    playerMoves.add(0, value);

    if(playerMoves.size() > 20) {
        playerMoves.remove(playerMoves.size() - 1);
    }
}


public void displayPlayerMoves() {

    int fullstopCount = 20;
    System.out.print(playerMoves.size() + " moves: ");

    for(int i = playerMoves.size(); i > 0; i--) {
        fullstopCount--;
        if(playerMoves.size() == fullstopCount) {
            System.out.print(playerMoves.get(i) + ".");
        } else {
            System.out.print(playerMoves.get(i) + ", ");
        }
    }


}

3 个答案:

答案 0 :(得分:1)

您要在列表的第一个位置添加每个元素:

playerMoves.add(0, value);

表示您正在创建一个列表,其顺序与插入顺序相反。

如果您将其更改为:

playerMoves.add(value);

它会将每个元素添加到列表的末尾,这也会导致列表按插入顺序打印。

如果您进行了更改,则还应更改

if(playerMoves.size() > 20) {
    playerMoves.remove(playerMoves.size() - 1);
}

if(playerMoves.size() > 20) {
    playerMoves.remove(0);
}

因为您想删除最旧的移动。

编辑:

我刚刚注意到,当你打印元素时,你会以相反的顺序迭代列表,但你的循环有错误的索引。它应该是:

int i = playerMoves.size() - 1; i >= 0; i--)

如果您使用该循环,则无需更改record方法。

如果您确实更改了列表中元素的顺序,则可以简化显示方法:

public void displayPlayerMoves() 
{
    System.out.print(playerMoves.size() + " moves: ");
    bool first = true;
    for(int value : playerMoves) {
        if (!first)
            System.out.print(", ");
        first = false;
        System.out.print(value);
    }
    System.out.print('.');
}

答案 1 :(得分:1)

您应该在末尾添加值,并从列表的开头删除旧值:

playerMoves.add(value);     
if(playerMoves.size() > 20) {
    playerMoves.remove(0);
} 

请注意,从列表开头删除O(n) ArrayList操作;更改为LinkedList将为O(1)

但如果您坚持使用ArrayList,则应在添加第二个元素之前删除第20个元素,因为添加第21个元素会导致ArrayList必须增加其容量。

答案 2 :(得分:0)

您的代码有两个缺陷:

首先添加索引并按相反顺序打印。

将添加元素更改为:

 playerMoves.add(value);

和循环打印为:

  for(int i =0; i <playerMoves.size(); i++) {
     // your code 
    }