错误标签:java.lang.NullPointerException
这个错误代表所代表的大致意义是空指针报错。
错误样例代码:
这个代码是将字符串进行长度比较并按升序排列
import java.util.*;
class English implements Comparable<English>
{
private String s;
English(){}
English(String s)
{
this.s=s;
}
public String toString()
{
return s+" ";
}
public int compareTo(English o1)
{
if(this.getS().length()-o1.getS().length()>0)
return 1;
if(this.getS().length()-o1.getS().length()<0)
return -1;
return 0;
//return 0;
}
public void setS(String s)
{
this.s=s;
}
public String getS()
{
return s;
}
}
public class Main
{
public static void main(String args[])
{
Scanner sc=new Scanner(System.in);
//String b="#";
English n[]=new English[5];//此处出现空指针,必须输入5个值,否则会出现空指针或者指针超出范围!!
int i=0;
for(i=0;i<5;i++)
n[i]=new English();
String a;
i=0;
while(sc.hasNext())
{
a=sc.next();
if(a.compareTo("#")==0)
break;
n[i]=new English(a);
i++;
}
Arrays.sort(n);
for(i=0;i<n.length;i++)
{
System.out.println(n[i].toString());
}
}
}
样例及报错情况如下:
adsa
dsdsd
fddfdf
ds
#
Exception in thread "main" java.lang.NullPointerException
at English.compareTo(Main.java:61)
at English.compareTo(Main.java:47)
at java.base/java.util.ComparableTimSort.binarySort(ComparableTimSort.java:262)
at java.base/java.util.ComparableTimSort.sort(ComparableTimSort.java:189)
at java.base/java.util.Arrays.sort(Arrays.java:1249)
at Main.main(Main.java:100)
解析:起初以为是比较器错误查了好几遍,又用collections.sort并用comparator又写了另一种用List的排列方法发现没问题。
最后锁定问题出在数组指针上,于是就对数组指针进行了多次更改。最后发现,数组指针定义的长度如果确定,就会出空指针错误或者超出位数的错误,所以问题出在这道题不该用定义好的数组长度上,所以此题应该用动态数组ArraysList解决而不能使用确定的数组长度。