第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java:嘗試將可比較數(shù)組轉(zhuǎn)換為整數(shù)數(shù)組時出錯

Java:嘗試將可比較數(shù)組轉(zhuǎn)換為整數(shù)數(shù)組時出錯

鳳凰求蠱 2023-05-24 17:43:04
我目前正在 Java 中實現(xiàn)最長遞增子序列問題的通用版本。該方法按預(yù)期工作,但當(dāng)我嘗試使用 Comparable[] 而不是 Integer[](或 int[])時,程序無法編譯。給出的錯誤是“Comparable cannot be cast to Integer”。我了解錯誤及其含義,但不知道如何解決。任何幫助將不勝感激 :)我已經(jīng)嘗試將方法的返回類型設(shè)為泛型 (>),但問題是 Java 不允許創(chuàng)建泛型數(shù)組。我試過只使用 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貢獻(xiàn)1780條經(jīng)驗 獲得超5個贊

換行就行

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

final Comparable[] LIS = lis(arr);

并更新 for 循環(huán)。

您的方法返回一個 Comparable 數(shù)組,因此您不能向下轉(zhuǎn)換為 Integer 數(shù)組,但由于您的數(shù)字的實現(xiàn)是 Integers,因此在運行時它們?nèi)匀槐灰暈檎麛?shù)。

無論如何,將結(jié)果設(shè)置為 Integer 數(shù)組與創(chuàng)建泛型方法的目的背道而馳。對于要傳遞給你的方法的東西,它必須有一個 compareTo 方法,并且固有地有一個 toString 方法,并且它滿足你需要程序做的一切。


查看完整回答
反對 回復(fù) 2023-05-24
?
紫衣仙女

TA貢獻(xiàn)1839條經(jīng)驗 獲得超15個贊

這里沒有什么可以解決的。這里:

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

您的方法 lis() 返回一個 Comparable 對象數(shù)組。Comparable 數(shù)組不是 Integer 數(shù)組!因此,該轉(zhuǎn)換在概念上不起作用。

是的,該數(shù)組包含 Integer 對象,但數(shù)組類型不是“整數(shù)數(shù)組”。

您必須迭代結(jié)果數(shù)組,然后才能投射各個條目。但是你不能將數(shù)組類型本身轉(zhuǎn)換成它不是的東西!

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


查看完整回答
反對 回復(fù) 2023-05-24
  • 2 回答
  • 0 關(guān)注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號