循环体内,Scanner定义的参数sc,加上sc.close();语句执行时报错
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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)
19
收起
正在回答
1回答
同学你好,sc.close()表示将Scanner对象关闭了,再次使用时就会报这个错误。这里建议将Scanner对象定义在循环外,避免重复创建,sc.close()写在最后。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧