2016-09-29 62 views
-2

當前選擇排序和氣泡排序代碼有困難。 選擇排序用於按升序排序學生ID,並使用氣泡排序按升序排序姓氏。該方案在選擇選擇10或11選擇排序和氣泡排序錯誤

我的數組被聲明如下編譯,但崩潰:

student[] list = new student[100]; //my array 

這是我有選擇排序和冒泡排序的代碼。我正在使用一個數組與方法:

if (choice == 10) { // Dissplay the sorted array by student id 

      SortArrayBySelection(list); 

      System.out.println("Sorted studentid are:"); 
      for (int i =0; i< studentNumber; i++) 
      { 
       System.out.println(list[i]); 
      } 



     } 

     if (choice == 11){ // Display the sorted array by family name 

      BubbleSort(list); 

      System.out.println("The sorted names are:"); 
      for(int i = 0; i < studentNumber; i++) 
      { 
       System.out.println(list[i].Getfamilyname()); 
      } 
     } 


    } while (choice != 1); 



} 

public static void SortArrayBySelection(student[] arrayToSort){ // Function to sort out the array on sutdentid 
for(int i = 0; i < arrayToSort.length-1; ++i) 
{ 
    int minIndex = i; 
    int studentid3 = arrayToSort[i].Getstudentid(); 
    int studentid2 = arrayToSort[minIndex].Getstudentid(); 
    for(int j = i + 1; j <arrayToSort.length; ++j) 
    { 
     int studentid1 = arrayToSort[j].Getstudentid(); 
     if(studentid1 < studentid2) 
     { 
      minIndex = j; 
     } 
    } 
    int temp = studentid3; 
    studentid3 = studentid2; 
    studentid2 = temp; 

} 
} 

public static void BubbleSort(student[] arraySort){ 
    String t; 
    for(int i = 0; i<arraySort.length; i++){ 
     for(int j=0; j<arraySort.length-1;j++){ 
      String str1 = arraySort[j].Getfamilyname(); 
      String str2 = arraySort[j+1].Getfamilyname(); 
      if(str1.compareTo(str2)<0){ 
       t = str1; 
       str1 = str2; 
       str2 = t; 
      } 
     } 
    } 

} 

任何建議,將不勝感激!謝謝 錯誤:

Exception in thread "main" java.lang.NullPointerException 
    at client.Client.SortArrayBySelection(Client.java:270) 
    at client.Client.main(Client.java:232) 

Exception in thread "main" java.lang.NullPointerException 
    at client.Client.BubbleSort(Client.java:288) 
    at client.Client.main(Client.java:246) 
+1

我想拋出一些異常,哪一個? – Rufi

+1

你得到的錯誤是什麼,'程序編譯但選擇選擇10或11時崩潰,它不會拋出任何錯誤?發佈錯誤日誌? –

+0

錯誤: 異常在線程 「主」 顯示java.lang.NullPointerException \t在client.Client.SortArrayBySelection(Client.java:270) \t在client.Client.main(Client.java:232)在 異常線程「main」java.lang.NullPointerException \t at client.Client.BubbleSort(Client.java:288) \t at client.Client.main(Client.java:246) – mandok

回答

0

當你沒有在你的代碼中提到line numbers,也Student class和你在哪裏準備student[] list = new student[100]的代碼。所以,據我可以看到以下幾行代碼就可以得到java.lang.NullPointerException

  • list長度將永遠100因爲你是與價值創造它。因此,如果您在運行時準備的某些動態值,那麼使用ArrayList<student> list=new ArrayList<student>();並使用list.add(yourObject);添加值會更好。

  • Exception in thread "main" java.lang.NullPointerException at client.Client.SortArrayBySelection(Client.java:270) at client.Client.main(Client.java:232)

    • 對於這個錯誤,你在呼喚SortArrayBySelection method,並且可以在上述錯誤落得線
      int studentid3 = arrayToSort[i].Getstudentid(); int studentid2 = arrayToSort[minIndex].Getstudentid(); int studentid1 = arrayToSort[j].Getstudentid();

原因的錯誤: 您沒有的,並且當您創建一個數組length 100時,您只能放置10-15個值,那麼它在其他位置將始終沒有值。但你的for-loop將去100 index position其中10-15 index後,您將通過調用getters總是空。

同樣的原因也適用於您的其他方法。