Базовый вопрос по инициализации массива и сортировке

StackOverflow https://stackoverflow.com/questions/502178

  •  20-08-2019
  •  | 
  •  

Вопрос

это довольно простой вопрос 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);

сортировка выдает исключение nullreferenceexception

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

Это было полезно?

Решение

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

Другие советы

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

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

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

[Отредактировано]

P.S.Выяснить это с помощью трассировки стека исключений - ваш лучший выбор.

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

Arrays.sort(myArray, 0, 3);

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

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

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

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

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

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

Массив содержит 10 элементов, но вы помещаете внутрь только 3.Итак, остальные 7 равны НУЛЮ.Рассмотрите возможность использования вместо этого ArrayList .

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top