私は分数のナップザック問題を解決するためにコンパレータインターフェイスについて学んでいます。線aとbの2つの配列は、(60、20)、(100,50)、(120,30)の3つの値 - 重量ペアを示します。コンパレータは、v [i]/w [i]の比に基づいてarr []をソートするものとします。ただし、次のコードは、私に奇妙なエラーを与える:ArrayIndexOutOfBoundsExceptionはJavaの私のコンパレータインターフェイスのため
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
私のコンパレータは、[] ARRのインデックス= 3にアクセスしようとしているようだが、私は、インデックスのそのアクセスを制限することはできません。どんな解決策ですか?
int[] v = {60, 100, 120}; // v: values. line a
int[] w = {20, 50, 30}; // w: weights. line b
int len = v.length;
Integer[] arr = new Integer[len];
for (int i=0; i<len; i++)
arr[i] = v[i]/w[i];
//sort arr[] based on the ratios of v[i]/w[i]
Arrays.sort(arr, new Comparator<Integer>() {
@Override public int compare(Integer o1, Integer o2) {
return Double.compare(v[o1]/w[o1], v[o2]/w[o2]);
}
});
double[] v_sorted = new double[len];
double[] w_sorted = new double[len];
for (int i = 0; i < len; ++i) {
v_sorted[i] = v[arr[i]];
w_sorted[i] = w[arr[i]];
}
を'コードでは?' w'ではなく 'v'と' weights'の代わりに 'values'を意味すると思います。 – GOXR3PLUS