循环体内,Scanner定义的参数sc,加上sc.close();语句执行时报错

循环体内,Scanner定义的参数sc,加上sc.close();语句执行时报错

import java.util.Scanner;

public class GuessDemo {

	public static void main(String[] args) {
		System.out.print("猜一个介于1到10之间的数字:");
		int number=(int)(Math.random()*10+1);
		int guess;
		do {
			Scanner sc=new Scanner(System.in);
			guess=sc.nextInt();
			sc.close();
			System.out.println("guess="+guess);
			if(guess<number) {
				System.out.print("太小,请重新输入:");
			}else if(guess>number){
				System.out.print("太大,请重新输入:");
			}
		}while(number!=guess);
		System.out.println("恭喜您,您猜对了!");
	}

}

为什么在循环体加上sc.close();在执行的时候为什么会报错?(去除sc.close();正常执行)

报错信息如下:

猜一个介于1到10之间的数字:1

guess=1

太小,请重新输入:Exception in thread "main" java.util.NoSuchElementException

at java.util.Scanner.throwFor(Scanner.java:862)

at java.util.Scanner.next(Scanner.java:1485)

at java.util.Scanner.nextInt(Scanner.java:2117)

at java.util.Scanner.nextInt(Scanner.java:2076)

at com.imooc.part5.GuessDemo.main(GuessDemo.java:13)

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,sc.close()表示将Scanner对象关闭了,再次使用时就会报这个错误。这里建议将Scanner对象定义在循环外,避免重复创建,sc.close()写在最后。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 飞越罗格镇 提问者 #1
    老师你好,是不是可以这么理解,sc在被close了以后,在整个程序周期就不能再被使用了,需要重新定义一个sc2?
    2020-02-02 22:54:43
  • 好帮手慕阿满 回复 提问者 飞越罗格镇 #2
    当sc被close后,不能再使用,如果再次使用,需要重新定义一个Scanner对象。通常在一个类中,我们只定义一个Scanner对象,程序结束时关闭Scanner对象。祝:学习愉快~
    2020-02-03 09:38:09
  • 飞越罗格镇 提问者 回复 好帮手慕阿满 #3
    了解了,谢谢老师
    2020-02-03 09:38:45
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师