簡體   English   中英

具有未初始化元素的排序數組

[英]Sorting array with non initialised elements

我的代碼可以按字母順序對我的第一個名稱數組進行排序,然后對相應的分數數組進行排序,以便他們正確的學生擁有正確的分數。 我的問題是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;
        }
      }
    }
  }

是。 代替

if (studentNamesArray[i].compareTo(studentNamesArray[i + 1]) > 0) {

嘗試使用三元,否則可以使用if-這是三元。

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]);
}

讀者可以練習其他更復雜的方法。

為了使其正常工作,我制作了一個全局變量來檢查數組中已經輸入了多少個元素,然后如下修改我的代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM