NoSuchElementException异常的处理

今天在敲代码的时候遇到了NoSuchElementException异常,这个异常是我第一次遇到,非常的陌生,于是我打算记录下我的解决过程。

NoSuchElementException异常

NoSuchElementException:没有这样的元素异常。
这是机翻的结果。当我看到这翻译时有点懵,于是我立马问了度娘。这个异常应该是说定位不到这样的元素,也就是找不到这样的元素。

出现问题的地方

我要实现的功能需要多次用到从控制台扫描。于是我就在每个需要用到的方法中都new了一个Scanner,并在方法结尾关闭了Sanner。

public void one(){
Scanner in=new Scanner(System.in);
int a=in.nextInt();
...
in.close();
}

public void two(){
Scanner in=new Scanner(System.in);
int a=in.nextInt();
...
in.close();
}

public void three(){
Scanner in=new Scanner(System.in);
int a=in.nextInt();
...
in.close();
}

public Test(){
one();
two();
three();
}
//代码大致是这样的,在用到one()时没有出问题,
//但在接下来的two()的in,nextInt()却报了这个异常。

我的思路是我用到一次就new一个Scanner,然后在用完后就关闭,直到下次用到时在重新new一次,然后在关闭。这样应该是不会出问题,至少在我思路中是不会出问题的。
但实际运行时却报了这个异常。

解决方法

我在度娘上看了别人在迭代中出现这个异常的解决方法,于是我大致知道问题出在哪里了。问题应该是出在我的多次new Scanner和close上,上一个方法把Scanner 给close了,下一个方法中的new应该是没有执行,或者是执行了但立马关闭了,于是导致接下来的in.nextInt();找不到in,但在编译中因为我确实new了一个Scanner,所以在编译时没有报错,但运行时出了问题。
我把代码修改为这样后就成功实现了我的功能。

public void one(Scanner in){
int a=in.nextInt();
...
}
public void two(Scanner in){
int a=in.nextInt();
...
}
public void three(Scanner in){
int a=in.nextInt();
...
}
public Test(){
Scanner in=new Scanner(System.in);
one(in);
two(in);
three(in);
in.close();
}
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值