次のプログラムがあります。エラー:互換性のないタイプ:Uをintに変換できません
import java.util.*;
public class Solution {
public static <U extends Number> double median(List<U> l) {
double Q = 0;
int n = l.size();
if (n%2 == 0) {
Q = ((int)l.get(n/2) + (int)l.get(n/2-1))/(double)2;
} else {
Q = new Double((int)l.get(n/2));
}
return Q;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
List<Integer> l = new ArrayList<>();
for (int i = 0; i < n; i++){
l.add(sc.nextInt());
}
Collections.sort(l);
double Q1 = 0, Q2 = 0, Q3 = 0;
List<Integer> lower = new ArrayList<>();
List<Integer> upper = new ArrayList<>();
if (n%2 == 0) {
lower.addAll(l.subList(0, n/2));
upper.addAll(l.subList(n/2, n));
} else {
lower.addAll(l.subList(0, n/2));
upper.addAll(l.subList(n/2 + 1, n));
}
Q2 = median(l);
Q1 = median(lower);
Q3 = median(upper);
System.out.format("%.0f%n", Q1);
System.out.format("%.0f%n", Q2);
System.out.format("%.0f%n", Q3);
sc.close();
}
}
それは罰金コンパイルし、私は日食からそれを実行しようとすると、私のローカルマシン上で実行されますが、私はhackerrankするためにそれを送信したとき、私は次のコンパイルエラーが発生します。
Solution.java:12: error: incompatible types: U cannot be converted to int
Q = ((int)l.get(n/2) + (int)l.get(n/2-1))/(double)2;
^
where U is a type-variable:
U extends Number declared in method <U>median(List<U>)
Solution.java:12: error: incompatible types: U cannot be converted to int
Q = ((int)l.get(n/2) + (int)l.get(n/2-1))/(double)2;
^
where U is a type-variable:
U extends Number declared in method <U>median(List<U>)
Solution.java:14: error: incompatible types: U cannot be converted to int
Q = new Double((int)l.get(n/2));
^
where U is a type-variable:
U extends Number declared in method <U>median(List<U>)
3 errors
私は戻ってint型への各リスト要素をキャストする必要があり、なぜ私も理解していない、私はUが数を拡張するので、私は戻ってint型にキャストせずにリストの要素を追加することができるはずと思いました。ジェネリックについて理解していないものがありますか? Q1、Q2、Q3は整数であることが保証されていますが(入力テストケースのためだけですが)、それは問題ではありません。なぜ私のプログラムがコンパイルされていませんか?
まあ 'UはNumber'が伸びるが、リスト'て '' '一覧である可能性があります。しかし、 'List 'や 'List 'などとすることもできます。 'List 'や 'List 'をメソッドに渡すとどうなりますか?なぜジェネリックをここに適用するのですか? –
が強制的に使用されているので、同じ方法を使用して倍精度浮動小数点数、またはBigIntegersのリストの中央値を見つけることはできません。 – Rockstar5645