我有一个带有学生姓名的单个demenational数组和一个带有学生标记的2D数组,我可以对这些名称进行排序,但我无法得到匹配的标记(因为它们必须保持相同的顺序)。这是我尝试过的代码:
static String[] studentNamesArray = new String[10];
static int[][] studentMarksArray = new int[10][3];
static void sortAlphabetical() {
String tempName;
int intSwap;
boolean flag = false;
while (flag==false) {
flag = true;
for (int i = 0; i < 9; i++) {
if (studentNamesArray[i].compareTo(studentNamesArray[i + 1])>0) {
tempName = studentNamesArray[i];
studentNamesArray[i] = studentNamesArray[i + 1];
studentNamesArray[i + 1] = tempName;
for(int y=0;y<2;y++){
intSwap = studentMarksArray[i][0];
studentMarksArray[i][y] = studentMarksArray[i+1][y+1];
studentMarksArray[i+1][y+1] = intSwap;
}
flag = false;
}
}
}
}
答案 0 :(得分:3)
您只需像对名称一样交换标记数组:
static void sortAlphabetical() {
String tempName;
int [] intSwap; //<-- note I changed this as an int[] array
boolean flag = false;
while (flag==false) {
flag = true;
for (int i = 0; i < studentNamesArray.length-1; i++) { //<-- note I changed this to length - 1 to avoid IndexOutOfBoundsException
if (studentNamesArray[i].compareTo(studentNamesArray[i + 1])>0) {
tempName = studentNamesArray[i];
studentNamesArray[i] = studentNamesArray[i + 1];
studentNamesArray[i + 1] = tempName;
intSwap = studentMarksArray[i];
studentMarksArray[i] = studentMarksArray[i+1];
studentMarksArray[i+1]= intSwap;
flag = false;
}
}
}
}
static String[] studentNamesArray = new String[3];
static int[][] studentMarksArray = new int[3][3];
public static void main (String[] args) throws java.lang.Exception {
studentNamesArray[0] = "Mark";
studentNamesArray[1] = "Anna";
studentNamesArray[2] = "Arnold";
studentMarksArray[0] = new int[]{1,2,3};
studentMarksArray[1] = new int[]{4,5,6};
studentMarksArray[2] = new int[]{0,0,0};
sortAlphabetical();
System.out.println(Arrays.toString(studentNamesArray));
System.out.println(Arrays.deepToString(studentMarksArray));
}
输出:
[Anna, Arnold, Mark]
[[4, 5, 6], [0, 0, 0], [1, 2, 3]]