笔记——JAVA Scanner (scanner 使用错误:at java.util.Scanner.next(Unknown Source) )

在写作业复查的时候发现有个东西一直出错
在这里插入图片描述是这个样子的。
一开始我以为是我一开始的主程序出错了

package test01;

import java.util.Scanner;

public class Test01 {
	static Mer a  ;
	static char w;
public static void main(String args[]) {
    int i=0
	while(i==0) {
	Scanner reader=new Scanner(System.in);
	System.out.println("what wordtype is your(M or S or W):");
	String s=reader.next();
	char w = s.charAt(0);
	if(w=='M')
	{
		Mer a=new Mer();
		a.ComputeSalary();
	}
	if(w=='S')	{
		Saler a=new Saler();
		a.ComputeSalary();
	}
	if(w=='W')	{
		work a=new work();
		a.ComputeSalary();
	}
	reader.close();//一开始以为的错误
	} 
}
}

我一开始以为是reader 关闭了之后所以就不能再重复了,所以我删掉了这一行,但是之后我做了个小段落,重复的输入输出,结果发现并不会报错,这下我就奇怪了,既然可以remake reader那是那里出错了呢?
后面我去查找了一下错误代码的解决方法,发现有这样的说法“这是因为在函数中,声明了一个scanner对象,并且调用了close方法。这可能是由于所有的scanner类共享一个输入流,当其中一个调用关闭函数的时候,所有的scanner对象都关闭了。 ”
所以如果是一个循环内的scanner对象关闭了再打开是无所谓的,但是如果一个scanner类关闭了而其他的scanner想要用的话那么就会出错。于是我检查了全部的类,发现每个类中都有一个
reader.close();
发现的时候真的有点点无语。话说回来这样的scanner感觉不是很好用,但是感觉可以应用再一些隐私保护方面,改一个方面就全给你关咯。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值