2015-05-14 58 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 
    }