Как исправить ArrayList java.lang.IndexOutOfBoundsException: индекс 20 за пределами длины 2 - PullRequest
0 голосов
/ 06 октября 2019

Я хочу сохранить числа без пары в "цветах" моего arrayList, но я получаю эту ошибку времени выполнения с моим arrayList. Main получает входные данные для n (размер массива) и входные данные для arItems, затем он преобразует элементы в arItems в целые числа, помещает их в массив массива ar, затем при вызове sockMerchant передает int n и массив int ar

static int sockMerchant(int n, int[] ar) {
    ArrayList<Integer> colors = new ArrayList<Integer>(n);
    int pairs = 0;

    for (int i = 0; i < n; i++) {
       if (!colors.contains(ar[i])) {
            colors.add(ar[i]);
        } else {
            pairs++;
            colors.remove(ar[i]);
        }
    }

    System.out.println(pairs);
    return pairs;
}
private static final Scanner scanner = new Scanner(System.in);

public static void main(String[] args) throws IOException {

    // n is the size of the array
    // sample n input: 9
    int n = scanner.nextInt();
    scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

    int[] ar = new int[n];

    //sample arItems input: 10 20 20 10 10 30 50 10 20
    String[] arItems = scanner.nextLine().split(" ");
    scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

    for (int i = 0; i < n; i++) {
        int arItem = Integer.parseInt(arItems[i]);
        ar[i] = arItem;
    }

    int result = sockMerchant(n, ar);


    scanner.close();
}

Я получаю ошибку:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 20 out-of-bounds for length 2
    at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
    at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
    at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
    at java.base/java.util.Objects.checkIndex(Objects.java:372)
    at java.base/java.util.ArrayList.remove(ArrayList.java:517)
    at Solution.sockMerchant(Solution.java:21)
    at Solution.main(Solution.java:48)

1 Ответ

0 голосов
/ 06 октября 2019

Вы получаете IndexOutOfBoundsException, когда пытаетесь удалить дубликаты из вашего массива colors. Это связано с тем, что метод remove() для ArrayList может принимать Object или int, а вы передаете int. Это означает, что вы на самом деле пытаетесь удалить определенный индекс, который, в вашем примере, является индексом 20, но этот индекс не существует в вашем массиве.

Вы можете изменить свой код как таковой, чтобы удалить значенияправильно на основе индекса.

static int sockMerchant(int n, int[] ar) {
    ArrayList<Integer> colors = new ArrayList<Integer>(10);
    int pairs = 0;

    for (int i = 0; i < n; i++) {
       if (!colors.contains(ar[i])) {
            colors.add(ar[i]);
        } else {
            pairs++;
            colors.remove(color.indexOf(ar[i]));
        }
    }

    System.out.println(pairs);
    return pairs;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...