我有一些代码按字母顺序对我的第一个名字排序进行排序,然后对相应的标记数组进行排序,以便他们纠正学生的正确标记。我遇到的问题是nullPointerException
错误。根据我的理解,这个错误是由于某些数组元素没有被初始化,如果某些索引尚未初始化,有什么办法可以对数组进行排序吗?
static String[] studentNamesArray = new String[10];
static int[][] studentMarksArray = new int[10][3];
static void sortAlphabetical() {
String nameSwap;
int [] markSwap;
boolean flag = false;
while (!flag) {
flag = true;
for (int i = 0;i < 9;i++) {
if (studentNamesArray[i].compareTo(studentNamesArray[i + 1]) > 0) {
nameSwap = studentNamesArray[i];
studentNamesArray[i] = studentNamesArray[i + 1];
studentNamesArray[i + 1] = nameSwap;
markSwap = studentMarksArray[i];
studentMarksArray[i] = studentMarksArray[i + 1];
studentMarksArray[i + 1]= markSwap;
flag = false;
}
}
}
}
答案 0 :(得分:2)
是。而不是
if (studentNamesArray[i].compareTo(studentNamesArray[i + 1]) > 0) {
尝试使用三元组,或者你可以使用if else - 这是一个三元组。
int compare = (studentNamesArray[i] == null) ? -1 :
studentNamesArray[i].compareTo(studentNamesArray[i + 1]);
if (compare > 0) {
三元相当于
int compare;
if (studentNamesArray[i] == null) {
compare = 1;
} else {
compare = studentNamesArray[i].compareTo(studentNamesArray[i + 1]);
}
如果将其他更复杂的东西留作读者的练习。
答案 1 :(得分:-2)
为了使它工作,我创建了一个全局变量来检查数组中输入了多少元素,然后修改我的代码如下:
static void sortAlphabetical() {
String nameSwap;
int [] markSwap;
boolean flag = false;
while (!flag) {
flag = true;
for (int i = 0;i < nameArrayCount-1;i++) {
if (studentNamesArray[i].compareTo(studentNamesArray[i + 1]) > 0) {
nameSwap = studentNamesArray[i];
studentNamesArray[i] = studentNamesArray[i + 1];
studentNamesArray[i + 1] = nameSwap;
markSwap = studentMarksArray[i];
studentMarksArray[i] = studentMarksArray[i + 1];
studentMarksArray[i + 1]= markSwap;
flag = false;
}
}
}
}