英文:
Removing random element from array and adding it to another array: OutOfIndex bound error
问题
这段代码有什么问题?
我试图从一个ArrayList中随机选择一个元素并将其移动到另一个ArrayList中以创建一个排列。它一直给我越界错误。
int size = 10;
for (int i = 0; i < 10; i++) {
int r = (int) (Math.random() * (size));
random.remove(r);
permutations.add(random.get(r));
size--;
}
这段代码存在问题。问题出在尝试从 random
列表中移除元素后,仍然尝试访问被移除的元素。这会导致越界错误,因为 random
列表的大小在每次迭代中都会减小,但在尝试访问 random.get(r)
时,仍然使用了原始的随机索引 r
。你需要在移除元素后,直接使用 r
作为索引来访问元素,而不是再次调用 random.get(r)
。以下是修复后的代码:
int size = 10;
for (int i = 0; i < 10; i++) {
int r = (int) (Math.random() * (size));
int removedElement = random.remove(r);
permutations.add(removedElement);
size--;
}
这样做可以确保每次都使用正确的索引来访问已经移除的元素。
英文:
What is wrong with this code?
I am trying to pick a random element from an ArrayList and move it to another ArrayList to create a permutation. It keeps giving me out of bounds errors.
int size = 10;
for (int i = 0; i < 10; i++) {
int r = (int) (Math.random() * (size));
random.remove(r);
permutations.add(random.get(r));
size--;
}
答案1
得分: 1
问题在于指令的顺序,首先你从位置 r 移除,然后你尝试从位置 r 获取。
permutations.add(random.get(r));
random.remove(r);
此外,如果你想从集合中移除元素,如 ArrayList,我建议使用迭代器(Iterators)。迭代器有 next() 方法用于获取数组中的下一个元素,还有 remove() 方法用于移除当前元素,你可以参考 https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
英文:
the problem is the order of the instructions first you are removing from position r and you try to get from position r.
permutations.add(random.get(r));
random.remove(r);
Moreover, If you want to remove from collections as arrayList I do recommend to use Iterators. Iterator has methos as next() for getting the next element in the array and remove() for removing the actual element you can check https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论