Java 如何按添加顺序打印ArrayList

Java 如何按添加顺序打印ArrayList,java,arrays,sorting,arraylist,Java,Arrays,Sorting,Arraylist,在整个程序中调用record()方法。因此,如果用户输入 1, 2, 3, 4, 5, 6, 7. 按照这个顺序,它打印出7,6,5,4,3,2,1。我试过增强for循环,for循环增加等等。请帮助,提前谢谢 ArrayList<Integer> playerMoves = new ArrayList<Integer>(20); public void record(int value) { playerMoves.add(0, value);

在整个程序中调用record()方法。因此,如果用户输入 1, 2, 3, 4, 5, 6, 7. 按照这个顺序,它打印出7,6,5,4,3,2,1。我试过增强for循环,for循环增加等等。请帮助,提前谢谢

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) + ", ");
        }
    }


}
ArrayList playerMoves=新的ArrayList(20);
公共无效记录(int值){
playerMoves.add(0,值);
如果(playerMoves.size()>20){
playerMoves.remove(playerMoves.size()-1);
}
}
public void displayermoves(){
int fullstopCount=20;
System.out.print(playerMoves.size()+移动:);
对于(int i=playerMoves.size();i>0;i--){
全站计数--;
如果(playerMoves.size()==fullstopCount){
系统输出打印(playerMoves.get(i)+“);
}否则{
系统输出打印(playerMoves.get(i)+“,”;
}
}
}

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

playerMoves.add(0, value);
playerMoves.add(value);     
if(playerMoves.size() > 20) {
    playerMoves.remove(0);
} 
这意味着您正在创建一个顺序与插入顺序相反的列表

如果将其更改为:

playerMoves.add(value);
它会将每个元素添加到列表的末尾,这也会导致按插入顺序打印列表

如果你改变了,你也应该改变

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

因为您要删除最旧的移动

编辑:

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

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('.');
}

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

playerMoves.add(0, value);
playerMoves.add(value);     
if(playerMoves.size() > 20) {
    playerMoves.remove(0);
} 
请注意,从列表的开头删除是对
ArrayList
O(n)
操作;更改到
LinkedList
将是
O(1)


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

您的代码有两个缺陷:

第一次添加索引并按相反顺序打印

将添加元素更改为:

 playerMoves.add(value);
并循环打印为:

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

for(int i=0;i为什么不
add(value)
?otw使用的
value
是什么?你的意思是
playerMoves.add(value);
?仍然打印7,6,5,4,3,2,1.:(@AndyTurner抱歉,输入错误:)我猜,您还需要删除元素0,而不是最后一个,或者在大小已经为20的情况下,您也不必费心添加元素。您正在使用
fullstopCount
它被初始化为
0
,然后您正在执行
fullstopCount--
为什么?,还需要将
add
方法更改为
playerMoves.添加(值);