波紋管代碼片段錯誤:
"Type mismatch: cannot convert from element type Object to Integer".
public static List<Integer> quickSort(List<Integer> arr) {
if(arr.size() == 1) {
return arr;
}
int mid = arr.size() / 2;
List left = Arrays.asList(arr).subList(0, mid);
List right = Arrays.asList(arr).subList(mid, arr.size());
Collections.sort(left);
Collections.sort(right);
for (Integer x : left) {
right.add(x);
}
return arr;
}
uj5u.com熱心網友回復:
有一個邏輯錯誤,Arrays.asList(arr)實際上創建了一個串列串列,List<List<Integer>>而看起來你想要的是一個串列,其中 arr 已經是一個。
此外,您需要正確引數化,List left否則它會被視為默認型別。List rightList<Integer>Object
public static List<Integer> quickSort(List<Integer> arr) {
if(arr.size() == 1) {
return arr;
}
int mid = arr.size() / 2;
List<Integer> left = arr.subList(0, mid);
List<Integer> right = arr.subList(mid, arr.size());
Collections.sort(left);
Collections.sort(right);
for (Integer x : left) {
right.add(x);
}
return arr;
}
編輯:在 return 陳述句中也回傳 arr 意味著你的函式什么都不做,因為它只是吐出未經編輯的輸入。
uj5u.com熱心網友回復:
老實說,我真的不知道從哪里開始。
首先:無論你在這里做什么,它都不是我所說的快速排序——因此方法名稱已經具有誤導性。但是,由于您無論如何都回傳了源串列并且沒有處理它的參考,所以您讓整個函式一開始就無用。
您的錯誤是因為 Java 中的串列是引數化的——這意味著它們需要知道它們將包含的條目的資料型別。由于 Java 中的一切都是 Object 的子類,因此 Lists 的“默認”型別是 Object。這就是<>資料型別旁邊的用途:定義串列的型別。
因此,對于您的示例:List<Integer> left,依此類推,至少可以解決錯誤,但不能解決您的錯誤功能。使用Collections.sort時實際上可以直接在 List 上執行,無需撰寫自己的函式來包裝它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/471918.html
