Java:尝试将可比较数组转换为整数数组时出错
我目前正在实现Java中最长递增子序列问题的通用版本。该方法按预期工作,但当我尝试使用Comparable[]而不是Integer[](或int[])时,程序将无法编译。给出的错误是“Compariable不能转换为整数”。我理解这个错误以及它的含义,但我不知道如何修复它。任何帮助都将不胜感激:) 我已经尝试将该方法的返回类型设置为泛型(>),但问题是Java不允许创建泛型数组。我已经尝试使用Integer[]作为返回类型,虽然它可以正常编译和工作,但这不是我想要的Java:尝试将可比较数组转换为整数数组时出错,java,return-type,comparable,Java,Return Type,Comparable,我目前正在实现Java中最长递增子序列问题的通用版本。该方法按预期工作,但当我尝试使用Comparable[]而不是Integer[](或int[])时,程序将无法编译。给出的错误是“Compariable不能转换为整数”。我理解这个错误以及它的含义,但我不知道如何修复它。任何帮助都将不胜感激:) 我已经尝试将该方法的返回类型设置为泛型(>),但问题是Java不允许创建泛型数组。我已经尝试使用Integer[]作为返回类型,虽然它可以正常编译和工作,但这不是我想要的 public class L
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;
}
}
公共类LIS{
公共静态void main(字符串[]args){
最后一个整数[]arr={-1,2,4,2,33,4,7,8,10,7,5,4,5,5,1};
最终整数[]LIS=(整数[])LIS(arr);
用于(int i:LIS){
系统输出打印(i+“”);
}
}
公共静态可比[]lis(可比[]arr){
//我们使用Compariable[],因此我们可以与任何可比类型互换使用
最终int N=阵列长度;
//Java方便地将数组值初始化为0:
int[]lisendingher=新的int[N];
对于(int i=0;i=0&&max!=0;i--){
if(lisEndingHere[i]==max){
LIS[--max]=arr[i];
}
}
返回LIS;
}
}
只需更改行即可
final Integer[] LIS = (Integer[]) lis(arr);
到
并更新for循环
您的方法返回一个可比较的数组,因此您不能向下转换为整数数组,但由于数字的实现是整数,因此在运行时它们仍然被视为整数
将结果设置为整数数组与生成泛型方法的目的背道而驰。对于要传递给您的方法的内容,它必须具有compareTo方法,并且固有地具有toString方法,并且该方法满足您需要程序执行的所有操作。这里没有需要修复的内容。在这里:
Integer[] LIS = (Integer[]) lis(...)
方法lis()返回可比较对象的数组。可比数组不是整数数组!因此,从概念上来说,该演员阵容无法发挥作用
是的,该数组包含整数对象,但数组类型不是“整数数组”
您必须迭代生成的数组,然后才能强制转换各个条目。但是您不能将数组类型本身强制转换为它不是的类型
除此之外,您还可以将泛型与列表一起使用 @GhostCat谢谢你的提示,你说得对-我马上给你换!记录在案:你只能接受一个答案,但你可以对收到的任何答案进行投票,以表示你对帮助你的人的感谢:-)
Integer[] LIS = (Integer[]) lis(...)