Ошибка NullPointerException в сортировке вставки
Я написал Java, чтобы проверить сортировку вставки для строк, но появляется сообщение об ошибке "java.lang.NullPointerException:
import java.util.Arrays;
public class SortTest
{
private String[] array;
final int size = 5;
public void sort()
{
String insert;
array = new String[size];
for ( int next = 1; next < array.length; next++ )
{
insert = array[next];
int moveItem = next;
while (moveItem > 0 && array[moveItem -1].compareTo(insert) > 0)
{
array[moveItem] = array[moveItem -1];
moveItem--;
}
array[moveItem] = insert;
}
}
public static void main (String[] args)
{
SortTest stringSort = new SortTest();
String array[] = {"aaa", "ccc", "eee", "zzz", "bbb"};
stringSort.sort();
System.out.println( stringSort );
}
}
Я следовал большинству кодов из учебника, и я действительно не могу найти, где проблемы, пожалуйста, помогите мне! Любая помощь приветствуется!
3 ответа
Вы не передаете объект массива в метод сортировки. Попробуйте следующий код:
public class SortTest {
public void sort(String[] array) {
String insert;
for (int next = 1; next < array.length; next++) {
insert = array[next];
int moveItem = next;
while (moveItem > 0 && array[moveItem - 1].compareTo(insert) > 0) {
array[moveItem] = array[moveItem - 1];
moveItem--;
}
array[moveItem] = insert;
}
}
public static void main(String[] args) {
SortTest stringSort = new SortTest();
String[] array = { "aaa", "ccc", "eee", "zzz", "bbb" };
//call sorting
stringSort.sort(array);
//print the sorted array values
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
Вы инициализируете свой array
как new String[size];
,
Это заполнит String
массив размеров size
со значениями по умолчанию, иначе null
за String
s.
Когда вы звоните compareTo
с предметами вашего array
Вы ссылаетесь на null
ценность как твой array
не был заселен String
экземпляры до этого.
В результате вы получите NullPointerException
,
В качестве быстрого теста попробуйте следующий код:
String[] foo = new String[2];
System.out.println(Arrays.toString(foo));
Выход будет:
[null, null]
Вы забыли пару вещей... вы не передаете свой массив в свой метод sort(). Второй В методе сортировки вы инициализируете новый массив, который содержит нулевое значение. Так что вам нужно изменить две вещи..
public class SortTest {
String[] array;
final int size = 5;
public SortTest(String[] array) {
this.array = array;
}
public void sort() {
String insert;
// array = new String[size];
for (int next = 1; next < array.length; next++) {
insert = array[next];
int moveItem = next;
while (moveItem > 0 && array[moveItem - 1].compareTo(insert) > 0) {
array[moveItem] = array[moveItem - 1];
moveItem--;
}
array[moveItem] = insert;
}
}
public static void main(String[] args) {
final String array[] = { "aaa", "ccc", "eee", "zzz", "bbb" };
final SortTest stringSort = new SortTest(array);
stringSort.sort();
System.out.println(stringSort);
}
}