为了账号安全,请及时绑定邮箱和手机立即绑定

Java:尝试将可比较数组转换为整数数组时出错

Java:尝试将可比较数组转换为整数数组时出错

凤凰求蛊 2023-05-24 17:43:04
我目前正在 Java 中实现最长递增子序列问题的通用版本。该方法按预期工作,但当我尝试使用 Comparable[] 而不是 Integer[](或 int[])时,程序无法编译。给出的错误是“Comparable cannot be cast to Integer”。我了解错误及其含义,但不知道如何解决。任何帮助将不胜感激 :)我已经尝试将方法的返回类型设为泛型 (>),但问题是 Java 不允许创建泛型数组。我试过只使用 Integer[] 作为我的返回类型,虽然编译和工作正常,但这不是我想要的。public class LIS {  public static void main(String[] args) {    final Integer[] arr = {-1, 2, 4, 2, 33, 4, 7, 8, 10, 7, 5, 4, 5, 5, 1};    final Integer[] LIS = (Integer[]) lis(arr);    for (int i : LIS) {      System.out.print(i + " ");    }  }  public static Comparable[] lis(Comparable[] arr) {    // We use Comparable[] so we can use interchangably with any Comparable type    final int N = arr.length;    // Java conveniently initializes array values to 0:    int[] lisEndingHere = new int[N];    for (int i = 0; i < N; i++) {      lisEndingHere[i] = 1;      int curMax = 0;      for (int j = 0; j <= i; j++) {        if (arr[i].compareTo(arr[j]) <= 0) continue;        if (lisEndingHere[j] > curMax) {          curMax = lisEndingHere[j];        }      }      lisEndingHere[i] += curMax;    }    // Find and return the longest increasing subsequence:    int max = 0;    for (int i = 0; i < N; i++) {      if (lisEndingHere[i] > max) max = lisEndingHere[i];    }    Comparable[] LIS = new Comparable[max];    for (int i = N-1; i >= 0 && max != 0; i--) {      if (lisEndingHere[i] == max) {        LIS[--max] = arr[i];      }    }    return LIS;  }}
查看完整描述

2 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

换行就行

final Integer[] LIS = (Integer[]) lis(arr);

final Comparable[] LIS = lis(arr);

并更新 for 循环。

您的方法返回一个 Comparable 数组,因此您不能向下转换为 Integer 数组,但由于您的数字的实现是 Integers,因此在运行时它们仍然被视为整数。

无论如何,将结果设置为 Integer 数组与创建泛型方法的目的背道而驰。对于要传递给你的方法的东西,它必须有一个 compareTo 方法,并且固有地有一个 toString 方法,并且它满足你需要程序做的一切。


查看完整回答
反对 回复 2023-05-24
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

这里没有什么可以解决的。这里:

Integer[] LIS = (Integer[]) lis(...)

您的方法 lis() 返回一个 Comparable 对象数组。Comparable 数组不是 Integer 数组!因此,该转换在概念上不起作用。

是的,该数组包含 Integer 对象,但数组类型不是“整数数组”。

您必须迭代结果数组,然后才能投射各个条目。但是你不能将数组类型本身转换成它不是的东西!

除此之外,您可以将泛型与列表一起使用。


查看完整回答
反对 回复 2023-05-24
  • 2 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信