Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 插入排序中出现NullPointerException错误_Java_Arrays_Nullpointerexception_Insertion Sort - Fatal编程技术网

Java 插入排序中出现NullPointerException错误

Java 插入排序中出现NullPointerException错误,java,arrays,nullpointerexception,insertion-sort,Java,Arrays,Nullpointerexception,Insertion Sort,我编写了一个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];

我编写了一个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 );
     }
 }
导入java.util.array;
公共类分类测试
{
私有字符串[]数组;
最终整数大小=5;
公共无效排序()
{
插入字符串;
数组=新字符串[大小];
for(int next=1;next0&&array[moveItem-1]。比较(插入)>0)
{
数组[moveItem]=数组[moveItem-1];
移动项目--;
}
数组[moveItem]=插入;
}
}
公共静态void main(字符串[]args)
{
SortTest stringSort=新的SortTest();
字符串数组[]={“aaa”、“ccc”、“eee”、“zzz”、“bbb”};
stringSort.sort();
System.out.println(stringSort);
}
}

我按照教科书中的大部分代码进行了操作,我真的找不到问题所在,请给我一些帮助!非常感谢您的帮助!

您将
数组初始化为
新字符串[size];

这将填充一个大小为
size
String
数组,其中包含
String
s的默认值aka
null

当您调用
compareTo
数组的项进行比较时,您引用的是
null
值,因为在此之前
数组
没有填充
字符串
实例

因此,您会得到一个
NullPointerException

作为快速测试,请尝试以下代码:

String[] foo = new String[2];
System.out.println(Arrays.toString(foo));
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]);
        }
    }
}
输出将是:

[null, null]

您忘记了几件事。您没有将数组传递给sort()方法。在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);
    }
}
公共类排序测试{
字符串[]数组;
最终整数大小=5;
公共排序集(字符串[]数组){
this.array=数组;
}
公共无效排序(){
插入字符串;
//数组=新字符串[大小];
for(int next=1;next0&&array[moveItem-1]。比较(插入)>0){
数组[moveItem]=数组[moveItem-1];
移动项目--;
}
数组[moveItem]=插入;
}
}
公共静态void main(字符串[]args){
最终字符串数组[]={“aaa”、“ccc”、“eee”、“zzz”、“bbb”};
最终排序集stringSort=新排序集(数组);
stringSort.sort();
System.out.println(stringSort);
}
}

您没有将数组对象传递给排序方法。请尝试以下代码:

String[] foo = new String[2];
System.out.println(Arrays.toString(foo));
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]);
        }
    }
}
公共类排序测试{
公共无效排序(字符串[]数组){
插入字符串;
for(int next=1;next0&&array[moveItem-1]。比较(插入)>0){
数组[moveItem]=数组[moveItem-1];
移动项目--;
}
数组[moveItem]=插入;
}
}
公共静态void main(字符串[]args){
SortTest stringSort=新的SortTest();
字符串[]数组={“aaa”、“ccc”、“eee”、“zzz”、“bbb”};
//呼叫分类
排序(数组);
//打印排序后的数组值
for(int i=0;i
请标记产生异常的行。发布前搜索: