【问题标题】:Trouble casting integer object to primitive type将整数对象转换为原始类型时遇到问题
【发布时间】:2019-11-03 11:00:28
【问题描述】:

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

我尝试使用 (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;
    }

}

它已编译,但测试显示:类 [I cannot be cast to class java.lang.Integer ([I and java.lang.Integer are in module java.base of loader 'bootstrap')

【问题讨论】:

  • [I 是一种数组类型,因此您无法将其转换为 Integer

标签: java arrays arraylist casting


【解决方案1】:

Arrays.asList(elements) 没有做你认为的事情,它返回一个包含 int[] 数组的列表,而不是数组的元素。您不能创建原语列表。如果要使用 List 必须先将 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++;
  }
}

【讨论】:

  • 有需要导入的库吗?当我使用你的代码时,它告诉我找不到符号。
  • 没有。它在抱怨哪个符号?
  • 代码使用java.util.Arrays,我认为你的代码包括java.util.*java.util.stream.Collectors。我认为都是从 Java 8 开始的。
  • 花哨的代码对我不起作用。我只是使用循环手动将值添加到列表中,它现在可以工作了。
【解决方案2】:

你可以替换

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

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

【讨论】:

    猜你喜欢
    • 2013-01-12
    • 2019-08-27
    • 2012-09-15
    • 1970-01-01
    • 2020-07-31
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多