Проблема приведения целочисленного объекта к примитивному типу. - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь выполнить эту задачу на кодовых войнах: https://www.codewars.com/kata/554ca54ffa7d91b236000023/train/java Я изменил исходный массив в arraylist, но затем я должен использовать значения в arrayist, чтобы сделать некоторые сравнения с примитивными типами.

Я пытался привести объекты Integer, используя (int), но ошибки приведения все еще есть. Когда я пытался сделать (int) (arrList.get (j)). Equals (current), он говорит мне, что логическое не может быть преобразовано в int.

import java.util.*;
public class EnoughIsEnough {

    public static int[] deleteNth(int[] elements, int maxOccurrences) {
      ArrayList arrList = new ArrayList<>(Arrays.asList(elements));
    for (int i = 0; i < arrList.size(); i++) {
      int current = (int)arrList.get(i);
      int occurrences = 1;
      for (int j = i + 1; j < arrList.size(); j++) {
        if (arrList.get(j).equals(current) && occurrences >= maxOccurrences) {
          arrList.remove(j);
        } else if (arrList.get(j).equals(current)) {
          occurrences++;
        }
      }
    }
    int arr[] = new int[arrList.size()];
    for (int i = 0; i < arrList.size(); i++) {
      arr[i] = (int) arrList.get(i);
    }
    return arr;
    }

}

Он скомпилирован, но тест показывает: class [I не может быть приведен к классу java.lang.Integer ([I и java.lang.Integer находятся в модуле java.base загрузчика 'bootstrap')

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Arrays.asList(elements) делает не то, что вы думаете, он возвращает список, содержащий массив int [], а не элементы массива.Вы не можете создать список примитивов.Если вы хотите использовать Список, вы должны сначала преобразовать int в Integer.

. Вы можете получить список Integer с помощью

List<Integer> arrList = Arrays.stream(elements).boxed().collect(Collectors.toList());

, однако у вас все еще естьошибка в вашей программе, из-за которой вы будете пропускать числа.

for (int j = i + 1; j < arrList.size(); j++) {
  if (arrList.get(j).equals(current) && occurrences >= maxOccurrences) {
    arrList.remove(j); // This shortens the list causing us to skip the next element
    j--; // One hackish way is to go back one step

  } else if (arrList.get(j).equals(current)) {
    occurrences++;
  }
}

Одно из решений состоит в том, чтобы сделать цикл в обратном направлении вместо

for (int j = arrList.size() - 1; j > i; j--) {
  if (arrList.get(j).equals(current) && occurrences >= maxOccurrences) {
    arrList.remove(j);
  } else if (arrList.get(j).equals(current)) {
    occurrences++;
  }
}
0 голосов
/ 20 июня 2019

Вы можете заменить

ArrayList arrList = new ArrayList<>(Arrays.asList(elements));

с

List<Integer> arrList = Arrays.stream(elements).boxed().collect(Collectors.toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...