我写了一个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 );
}
}
我跟着教科书的大部分代码,我真的找不到问题所在,请给我一些帮助!任何帮助表示赞赏!
答案 0 :(得分:2)
您将array
初始化为new String[size];
。
这将填充String
大小为size
的数组,其默认值为null
的{{1}}。
当您使用String
的项目致电compareTo
时,您引用的是array
值,因为null
之前未填充array
个实例那。
因此,您获得String
。
作为快速测试,请尝试以下代码:
NullPointerException
输出将是:
String[] foo = new String[2];
System.out.println(Arrays.toString(foo));
答案 1 :(得分:0)
你忘记了几件事......你没有将你的数组传递给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);
}
}
答案 2 :(得分:0)
您没有将数组对象传递给sort方法。请尝试以下代码:
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]);
}
}
}