黑马程序员技术交流社区

标题: 一个关于Scanner类的问题,求解答,谢谢! [打印本页]

作者: panwei    时间: 2015-7-31 22:15
标题: 一个关于Scanner类的问题,求解答,谢谢!
如果删除掉该程序中第一条:in.close();语句,程序可以正常运行,如果不删除程序将报异常
Exception in thread "main" java.util.NoSuchElementException
        at java.util.Scanner.throwFor(Unknown Source)
        at java.util.Scanner.next(Unknown Source)
        at java.util.Scanner.nextInt(Unknown Source)
        at java.util.Scanner.nextInt(Unknown Source)
        at com.itheima.Test5$Lesson.choice(Test5.java:88)
        at com.itheima.Test5.main(Test5.java:32)

想请教的是,这是为什么??

package com.itheima;

import java.util.Scanner;

/**
* 第5题:定义一个包含私有成员变量和函数的类,
* 再定义一个内部类,在内部类函数中访问外部成员变量,
* 并调用外部函数。在外部类函数中创建内部类对象,调用内部类函数。
*
* @author 潘伟
*
*/
public class Test5 {

        // 定义私有成员变量:年龄,性别,年龄
        private String name = "";
        private String sex = "";
        private int age;
        private int language;

        public static void main(String[] args) {

                Test5 person = new Test5();
                person.input();
               


               
                //在外部类函数中创建内部类对象,调用内部类函数。

                Lesson lesson=person.new Lesson();
                lesson.choice();
                lesson.lessonDisplay();
               

        }
       


        // 定义私有函数:输入用户信息
        private void input() {

                // 用户输入
                Scanner in = new Scanner(System.in);

                System.out.println("请输入您的姓名:" );
                this.name = in.next();
               
                System.out.println("请输入您的性别:" );
                this.sex = in.next();

               
                System.out.println("请输入您的年龄:" );
                this.age = in.nextInt();

                 in.close();


        }

        // 定义私有函数:显示用户信息
        private void display() {

                System.out.println("*************");
                System.out.println("*************");
                System.out.println("*************");
                System.out.println("");
                System.out.println("姓名:" + name);
                System.out.println("性别:" + sex);
                System.out.println("年龄:" + age);

        }

        // 定义内部类
        class Lesson {


                // 定义内部类函数:选择课程
                void choice() {
                       
                        //调用外部函数。
                        Test5.this.display();
                       
                        System.out.println("请选择您的课程:");
                        System.out.println("1--汉语");
                        System.out.println("2--英语");
                       
                        Scanner in=new Scanner(System.in);
                        Test5.this.language=in.nextInt();
       
                        in.close();
                }
               
                //在内部类函数中访问外部成员变量(打印输出:姓名、性别、年龄、课程)
                void lessonDisplay(){
                       
                        String language="汉语";
                        if(Test5.this.language==2){
                                language="英语";
                        }
                               
                        Test5.this.display();       
                        System.out.println("课程:"+language);
                }
        }

}








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2