Основной вопрос инициализации массива и сортировки - PullRequest
2 голосов
/ 02 февраля 2009

это довольно простой вопрос Java

У меня есть массив, содержащий строку, которую я хочу отсортировать, используя java.util.Arrays.sort

когда я пишу

String[] myArray = {"A","B","C"};
java.util.Arrays.sort(myArray);

сортируется правильно

однако, когда у меня есть

String[] myArray = new String[10];
myArray[0] = "A";
myArray[1] = "B";
myArray[2] = "C";

java.util.Arrays.sort(myArray);

сортировка создает исключение нулевой ссылки

Я почти уверен, что это что-то действительно глупое, я просто не понимаю сейчас. Я должен новый String, потому что жесткое кодирование значений по умолчанию никого не получает нигде.

Ответы [ 9 ]

7 голосов
/ 02 февраля 2009

Когда вы инициализируете второй массив, вы инициализируете только первые три элемента. Другие элементы инициализируются нулем и, следовательно, не могут быть отсортированы.

3 голосов
/ 02 февраля 2009

попробуйте следующее, чтобы отсортировать только первые три элемента.

Arrays.sort(myArray, 0, 3);
3 голосов
/ 02 февраля 2009

В источнике метод использует compareTo () в качестве условия сортировки. Очевидно, что вызов compareTo () для null вызовет исключение NullPointerException. Как указано в Java Docs,

Все элементы в массиве должны быть взаимно сопоставимы (то есть e1.compareTo (e2) не должен бросать ClassCastException для любых элементов е1 и е2 в массиве)

Конечно, здесь речь идет не о ClassCastException, но вызов comapreTo () очевиден.

[Изменено]

P.S. Понимание этого из Exceck Stack Trace - ваш лучший выбор.

1 голос
/ 02 февраля 2009

Он не может работать с нулевыми строками, которые существуют при первоначальном создании массива. Чтобы избежать явно сделать все как "" или назначить столько, сколько требуется.

Хотя не знаю, является ли это пропуском на уровне API, так как они могли бы удовлетворить нулевой объект (как мы делаем в порядке SQL) или есть что-то еще к нему.

1 голос
/ 02 февраля 2009

Я думаю, что поскольку вы заставляете myArray хранить 10 элементов, это (эффективно) добавляет 7 нулей в конец, а затем Arrays.sort() не может отсортировать нулевой элемент по строке.

1 голос
/ 02 февраля 2009

В результате получается, что когда у вас есть массив из десяти элементов, остальные элементы не инициализируются. Поэтому, когда алгоритм сортировки работает, он пытается получить значение строки, но вместо этого ничего не получает и выдает исключение.

Вам нужно убедиться, что вы не пытаетесь отсортировать массив, который имеет больше места, чем вещи, которые вы помещаете в него.

0 голосов
/ 05 октября 2015

Список массивов следует использовать, потому что есть 3 элемента, а не 10.

Остальные 7 элементов массива будут иметь нулевое значение.

Именно эти нулевые значения вызывают проблему с пустым указателем при сортировке.

0 голосов
/ 02 февраля 2009

Массив состоит из 10 элементов, но вы положили только 3 внутри. Итак, остальные 7 равны NULL. Попробуйте вместо этого использовать ArrayList.

0 голосов
/ 02 февраля 2009

Вы определяете размер массива на 10, но инициализируете только 3 индекса. Измените размер массива на 3 или инициализируйте все десять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...