2015-05-14 57 views
0

在我的程序中调用record()方法。所以如果用户输入 1,2,3,4,5,6,7。按照该顺序,它打印出7,6,5,4,3,2,1。并且,我尝试了增强的for-loops,forloops增量等请帮助,提前致谢。如何按照添加的顺序打印ArrayList

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


} 
+1

'fullstopCount'为'0',那么你正在做'fullstopCount'它被初始化为什么??还需要将'add'方法更改为'playerMoves.add(value);' – Prashant

+0

@Prashant哎呀 – BriannaXD

回答

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

为什么不是'add(value)'? otw使用的“价值”是什么? –

+0

你是不是指'playerMoves.add(value);'? –

+0

Still print 7,6,5,4,3,2,1. :( – BriannaXD

1

你应该值添加到年底,并从列表开始删除旧值:

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

注意,从列表中的开始删除是ArrayListO(n)操作;改为LinkedList将是O(1)

但是如果你坚持ArrayList,你应该在添加第二个元素之前删除第二个元素,因为添加第21个元素将导致ArrayList不得不增加其容量。

0

您的代码有两个缺陷:

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

变化添加元素:

playerMoves.add(value); 

和回路印刷为:您正在使用

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