2016-09-29 16 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; 
      } 
     } 
    } 

} 

私は何か提案がありますでしょうか?あなた エラーに感謝:あなたは、あなたのコードでline numbersを言及していないとして

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がclient.Client.SortArrayBySelection(Client.java:270)client.Client.mainで \t(Client.java:232) 例外で \tスレッド "main" java.lang.NullPointerException \t、client.Client.BubbleSort(Client.java:288) \t at client.Client.main(Client.java:246) – mandok

答えて

0

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();

理由です: valuesはにありませんと、length 100の配列を作成するときに、10-15の値だけを置くと、他の場所には常に値はありません。しかし、for-loop100 index positionになります。10-15 indexの後には、gettersを呼び出すと常にnullが返されます。

他の方法にも同じ理由があります。