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