图块无法阐明我的问题, 所以这是我程序的一部分:
public static void selectionsort(int[] userID, double[] donation, PrintWriter output) {
int min, swap;
for (int i = 0; i < userID.length - 1; i++) {
min = i;
for (int m = i + 1; m < userID.length; m++) {
if (userID[m] < userID[i]) {
min = m;
swap = userID[min];
userID[min] = userID[i];
userID[i] = swap;
}
}
output.println(userID[i] + " " + donation[i]);
}
}
我的数组如下:
456 250.0
123 175.34
345 123.06
但是当我的方法转到
时output.println(userID[i]+" "+donation[i]);
它像这样打印出来:
123 250.0
345 175.34
456 123.06
我想保持ID号和捐款的匹配。例如,无论456移动到何处,456都应始终与250.00关联。我该如何解决?
答案 0 :(得分:1)
问题是因为在该方法中,仅对userID
数组进行了排序,而对donation
数组没有进行相应的重新排序。并且userID
数组元素和donation
数组元素之间没有其他映射,因此两个数组元素的打印都不会显示以前的关联。
因此,在方法中,每当交换userID
数组元素的位置时,也必须交换相应的donation
数组元素的位置。可以按照以下步骤完成:
public static void selectionsort(int[] userID, double[] donation, PrintWriter output) {
int min, swap;
for (int i = 0; i < userID.length - 1; i++) {
min = i;
for (int m = i + 1; m < userID.length; m++) {
if (userID[m] < userID[i]) {
min = m;
swap = userID[min];
userID[min] = userID[i];
userID[i] = swap;
swap=donation[min];
donation[min]=donation[i];
donation[i]=swap;
}
}
output.println(userID[i] + " " + donation[i]);
}
}