Ошибка 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 за Strings.

Когда вы звоните 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);
    }
}
Другие вопросы по тегам