我有两个数组,一个字符串和一个int,我想通过int数组对数组进行排序,而字符串数组必须与int数组对应,所以如果我移动一个int我需要移动一个字符串或副verca。我现在拥有它的方式让我的异常超出范围。
public static void mergeSort(int[] arr,String[] str) {
if (arr.length > 1 && str.length > 1) {
int[] left = Arrays.copyOfRange(arr, 0, arr.length/2);
int[] right = Arrays.copyOfRange(arr, left.length, arr.length);
String[] Sl = Arrays.copyOfRange(str, 0, str.length/2);
String[] Sr = Arrays.copyOfRange(str, Sl.length, str.length);
mergeSort(right, Sr);
mergeSort(left, Sl);
merge(right, left, Sr, Sl,arr, str);
}
}
public static void merge(int[] left, int[] right,
String[] Sleft, String[] Sright,
int[] orig, String[] sorig) {
int i = 0;
int j = 0;
int f = 0;
int tots = right.length + left.length;
while (f < tots) {
if (i < left.length && j < right.length) {
if (left[i] < right[j]) {
orig[f] = left[i];
sorig[f] = Sleft[i];
i++;
f++;
} else if(left[i] > right[j]) {
orig[f] = right[j];
sorig[f] = Sright[j];
j++;
f++;
}
} else if (i >= left.length) {
orig[f] = left[i];
sorig[f] = Sleft[i];
f++;
j++;
} else if (j >= left.length) {
orig[f] = right[j];
sorig[f] = Sright[j];
f++;
i++;
}
}
}
答案 0 :(得分:1)
问题在于:
} else if (i >= left.length) {
orig[f] = left[i];
就这一点而言,i
总是超出界限,因为你专门测试它是否只是之前的那一行。