我试图做到这一点,以便我可以将数据写入 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)
最佳答案
当您分配一个primitive时(例如 int
)到另一个变量,这会将值复制到新变量。对于对象,这有点不同,因为这些变量将指向同一个对象。
int arraySize = list.size();
所以上面的行只是将 arraySize 设置为列表的当前大小,arraySize 不会随着列表大小的变化而变化。由于您在列表为空时执行此操作,因此列表将保持为 0
,并且您将尝试获取索引 0
和 0-1 = 处的元素-1
,这是您的异常出现的地方。
您应该在插入所有元素后设置它。
请注意,Java 中的索引从 0 开始,因此最后一个元素已经位于 list.size() - 1
,而不是 list.size()
。
关于java - 如何在java ArrayList中向后移动数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31055047/