一个简单错误的产生原因java.lang.NullPointerException

错误标签: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解决而不能使用确定的数组长度。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值