使用非初始化元素对数组进行排序

时间:2013-11-30 20:53:26

标签: java arrays sorting initialization

我有一些代码按字母顺序对我的第一个名字排序进行排序,然后对相应的标记数组进行排序,以便他们纠正学生的正确标记。我遇到的问题是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;
        }
      }
    }
  }

2 个答案:

答案 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;
        }
      }
    }
  }