A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

JoshuaL

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

大家好,以下代码欲接收用户输入的5个数字,然后再打印出来。对用户的输入做了异常处理,但一运行起来,输入了一个数字之后,就开始不停地打印异常信息:请输入第2个数字:
java.util.NoSuchElementException


请问这段代码问题出在哪里?
  1. import java.util.*;

  2. public class TestPrint {
  3.         public static void main(String[] args) {
  4.                 ArrayList<Integer> arrayNumber = new ArrayList<Integer>();
  5.                 for (int i = 0; i != 5; ++i) {
  6.                         int nNumber = getUserInputSeconds(i + 1);
  7.                         arrayNumber.add(nNumber);
  8.                 }
  9.                
  10.                 for (Integer i : arrayNumber) {
  11.                         System.out.println(i + " ");                       
  12.                 }
  13.         }
  14.        
  15.         // 接收输入,非法时提示重新输入
  16.         private static int getUserInputSeconds(int nIndex) {
  17.                 int nSeconds = 0;
  18.                 while (true) {
  19.                         System.out.printf("请输入第%d个数字:\n", nIndex);
  20.                         boolean bInputSuccess = true;
  21.                         try {
  22.                                 nSeconds = doGetInputSeconds();
  23.                         } catch (Exception e) {
  24.                                 System.out.println(e.toString());
  25.                                 bInputSuccess = false;
  26.                         }
  27.                         finally {
  28.                                 if (bInputSuccess) {
  29.                                         break;
  30.                                 }
  31.                         }
  32.                 }
  33.                 return nSeconds;
  34.         }
  35.        

  36.         private static int doGetInputSeconds() throws Exception {
  37.                 Scanner s = new Scanner(System.in);
  38.                 int nSeconds = s.nextInt();
  39.                 s.close();
  40.                 return nSeconds;
  41.         }
  42. }
复制代码



3 个回复

倒序浏览
你的scanner   close了
回复 使用道具 举报
本帖最后由 JoshuaL 于 2015-10-4 15:09 编辑
zombie_ad 发表于 2015-10-4 13:05
你的scanner   close了
注释掉s.close()之后,果然可以了。但我不明白的是,我每次都是new 了一个新的Scanner啊……继续求解
回复 使用道具 举报
使用的是同一个输入流,关闭就是System.in,所以。。。。。
NoSuchElementException,就是因为这个,close函数只能使用一次,应该放在main程序结束的前一步!

牵扯到IO流的知识,我暂时没看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马