2016-09-29 2 views
-2

В настоящее время с трудом выбирая Сортировка и Сортировка Bubble. Сортировка выбора используется для сортировки идентификатора студента в порядке возрастания, а сортировка пузыря используется для сортировки фамилий в порядке возрастания. Программа компилируется, но сбои при выборе выбор 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) Исключение в thread "main" java.lang.NullPointerException \t у клиента.Client.BubbleSort (Client.java:288) \t у клиента.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();

Причина ошибки: У вас нет values на given index, и при создании массива length 100, где вы помещаете только пусть 10-15 значений, он всегда будет иметь значения в другом месте. Но ваш for-loop пойдет на 100 index position, в котором после 10-15 index вы всегда получите нуль, позвонив по номеру getters.

Такая же причина для вашего другого метода.

Смежные вопросы