繁体   English   中英

如何在Java ArrayList中向后拉数据

[英]How to pull data moving backwards in a java ArrayList

我正在尝试使其能够将数据写入ArrayList以跟踪随机整数,然后将具有一个上一个按钮,该按钮将返回到最后一个结果(这只是测试该代码,这不是该项目的完整代码) )尝试获取int arraySize并将其减去1并重新打印数据时,出现错误。 任何想法,为什么会发生这种情况,或如何以另一种方式完成任务。

int lenth = 10;
ArrayList<Integer> list = new ArrayList<Integer>();
int arraySize = list.size();
Random random = new Random();
int newRandom = random.nextInt(lenth);
list.add(newRandom);
newRandom = random.nextInt(lenth);
list.add(newRandom);
System.out.println(list.get(arraySize));
arraySize--;
System.out.println(list.get(arraySize));

这也是我得到的错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at test.C_MainActivity.main(C_MainActivity.java:22)

当您将一个原语 (例如int )分配给另一个原语时,这会将值复制到新变量中。 对于对象,这有点不同,因为这些变量将指向同一对象。

int arraySize = list.size();

因此,以上行仅将arraySize设置为列表的当前大小, arraySize不会随着列表大小的变化而改变。 由于您在列表为空时执行此操作,因此列表将为0并保持为0 ,您将尝试获取索引为00-1 = -1的元素,这是您的异常所在。

您应该只在插入所有元素之后进行设置。


请注意,Java中的索引从0开始,因此最后一个元素将已经在list.size() - 1 ,而不是list.size()

在将任何内容添加到列表之前,您要设置arraySize。 arraySize的值将始终为0,因为您仅在开始时进行了设置。 当您调用arraySize--时,arraySize现在为-1,而当您调用list.get(arraySize)时,您将在请求索引-1时获得索引超出范围的异常。

看来您的目标是将值放入一个集合中,然后将它们出队。 例如, LinkedList与其push()pop()方法更合适。

无论如何,您不应该通过外部变量来跟踪ArrayList的大小。 ArrayList已经为您提供了此类数据,因此您只需查询列表即可知道其大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM