无法将整数对象转换为原始类型

时间:2019-06-20 15:16:38

标签: java arrays arraylist casting

我正在尝试在代码战中挑战:https://www.codewars.com/kata/554ca54ffa7d91b236000023/train/java 我将原始数组更改为arraylist,但随后必须使用arrayist中的值与原始类型进行一些比较。

我尝试使用(int)强制转换Integer对象,但仍然存在强制错误。当我尝试执行(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;
    }

}

它已编译,但测试显示:类[无法将其强制转换为类java.lang.Integer([I和java.lang.Integer在加载程序'bootstrap'的模块java.base中)

2 个答案:

答案 0 :(得分:1)

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++;
  }
}

答案 1 :(得分:0)

您可以替换

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

使用

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