2013-05-10 5 views
3

Я работаю над некоторыми алгоритмами сортировки для школьного проекта, и у меня есть проблема. Следующий код, не сортирующий массив, я пробовал один и тот же код с массивом чисел (единственное изменение в if), и он работал, но теперь с массивом String и использованием compareTo не работает его просто puts элементы в «случайном порядке».Java: Выбор типа строкового массива

public static void selectionSortISBN(Book pin[], int booksCounter) { 
    for (int x = 0; x < booksCounter; x++) { 
     int minIndex = x; 
     for (int y = x + 1; y < booksCounter; y++) { 
      if (pin[y].getISBN().compareTo(pin[minIndex].getISBN()) < 0) { 
       minIndex = y; 
      } 
     } 
     Book temp = pin[x]; 
     pin[x] = pin[minIndex]; 
     pin[minIndex] = temp; 
    } 
} 

EDIT:

Я изменил мой внутренний для этого:

 for (int y = x + 1; y < booksCounter; y++) { 
      int com=pin[y].getISBN().compareTo(pin[minIndex].getISBN()); 
      System.out.println(pin[y].getISBN()+" "+pin[minIndex].getISBN()+" = "+com); 
     } 

и выход я получаю это

1537 1485 = 1 
596 1485 = 4 
1164 1485 = -3 
909 1485 = 8 
596 1537 = 4 
1164 1537 = -4 
909 1537 = 8 
1164 596 = -4 
909 596 = 4 
909 1164 = 8 
+0

Код выглядит нормально. Вы проверили входные значения? В частности, я бы удалил 'booksCounter' и использовал' pin.length' вместо – SJuan76

+1

Вы уверены, что заказ "Random"? Можете ли вы разместить пример ввода и вывода? – pcalcao

+1

Вы сортируете алфавитно по ISBN, а не по названию, вы это знаете? Действительно ли они «случайно» упорядочены по ISBN? Что делает «getISBN»? возможно, эта функция не вернет правильные значения. – svinja

ответ

4

Это работает правильно, ошибка, которую вы делаете, заключается в том, что вы ожидаете, что «596» будет находиться под «1485», w Если это не так, вы сортируете их как строки, 596> 1485, как BA> AAAABA. Добавьте ведущие нули, если вы хотите сравнивать цифры буквенно-цифровым способом.

+3

Может быть лучше преобразовать их в числа. – Dukeling

+0

ohh теперь видит мою ошибку, спасибо – SteveL

0

Если вы имеете дело только с числами, тогда преобразуйте свой массив строк в массив чисел

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