当前位置: 首页 > 面试题库 >

从ArrayList中删除整数IndexOutOfBoundsException [重复]

鲁向明
2023-03-14
问题内容

这个问题已经在这里有了答案

是什么导致java.lang.ArrayIndexOutOfBoundsException,如何防止它发生?
(25个答案)

4年前关闭。

import java.util.Random;
import java.util.ArrayList;
public class Game {
ArrayList<Integer> numere = new ArrayList<>();
ArrayList<Bila> balls = new ArrayList<Bila>();
ArrayList<String> culori = new ArrayList<>();
Random random = new Random();
int nrBalls=0;
public void createColours(){
    for(int i=0;i<7;i++){
        culori.add("Portocaliu");
        culori.add("Rosu");
        culori.add("Albastru");
        culori.add("Verde");
        culori.add("Negru");
        culori.add("Galben");
        culori.add("Violet");
    }
}
public void createNumbers(){
    for(int i=1;i<50;i++){
        numere.add(i);
        System.out.print(numere.size());
    }
}
public void createBalls(){
    while(nrBalls<36){
        int nr =numere.get(random.nextInt(numere.size()));
        numere.remove(nr);
        String culoare =culori.get(random.nextInt(culori.size()-1));
        culori.remove(culoare);
        balls.add(new Bila(culoare,nr));
        nrBalls++;
    }
}
}

所以我有另一个带有main方法的类,在该类中我调用createNumbers(),createColours(),createBalls()。当我运行程序时,我在numere.remove(nr)处得到一个IndexOutOfBoundsException,上面写着index:数字和大小:另一个数字..总是第二个数字小于第一个数字..为什么会这样?我在哪里错?


问题答案:

问题在于ArrayList.remove()有两种方法,一种是Object,另一种是(int索引)。当您使用整数调用.remove时,它正在调用,.remove(int)它会删除索引,而不是对象值。

为了回应评论,这里有更多信息。

该行在调用返回的索引处返回对象int nr = numere.get(random.nextInt(numere.size())
。下一行numere.remove(...)尝试从ArrayList中删除该值。

您可以执行以下两种方法之一:

int idx = random.nextInt(numere.size());
int nr = numere.get(idx);
numere.remove(idx);

.remove(int)方法返回对象的remove的值,您也可以执行以下操作:

int idx = random.nextInt(numere.size());
int nr = numere.remove(idx);

当然,如果需要,您可以将这两行合并为一条。



 类似资料:
  • 问题内容: 我有一个字符串数组列表,并在其中添加了一些重复值。我只想删除那个重复的值,那么如何删除它。 在这个例子中我有一个主意。 但是有没有足够的方法来删除该重复表格列表。没有使用For循环?我可以通过使用HashSet或其他方式来做到这一点,但只能使用数组列表。想对此提出您的建议。谢谢您的提前答复。 问题答案: 您可以从列表中创建一个。在将包含每个元素只有一次,在相同的顺序。然后从创建一个新的

  • 我有一个问题编码这个: 编写一个名为的静态方法,该方法将整数数组作为输入,并返回一个新的整数数组,其中所有重复项都被删除。例如,如果输入数组具有元素{4,3,3,4,5,2,4},则结果数组应为{4,3,5,2} 这是我目前所做的

  • 我有一个假设,它有8个项目A-H,现在我想从中删除存储在int数组中的1,3,5位置项目。我该怎么做。 我正试着和你一起做这件事 但在数组的第一个被删除的项被更改之后,在下一次迭代中它删除了错误的元素或给出异常。

  • 我有一个arraylist,它包含一对整数(例如int i,int j)。但它可能包含重复对(如(int i,int j)和(int j,int i))。现在如何在O(n)时间复杂度中去除重复。

  • 问题内容: 如何从ArrayList中删除重复的元素? 问题答案: 如果你不想在中添加重复项,则应考虑为什么要使用允许重复项的。删除重复元素的最简单方法是将内容添加到中(不允许重复),然后将其添加Set回中ArrayList: 当然,这会破坏中的元素顺序。

  • 所以我正在尝试创建这个循环,它可以从ArrayList中移除给定字符串中的特定字符。问题是,当一行中有两个相同的字符时,它会遗漏第二个字符,因为当第一个字符被移除时,第二个字符会在数组列表中向下推一个位置。这是我目前所掌握的。有人知道怎么解决这个吗?我仍然是java的初学者,所以任何帮助都将非常感谢。 从本例中打印出来的内容在:[u,B,u,o,p]之后,而我希望它在:[u,u,o,p]之后