如果删除掉该程序中第一条: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);
}
}
}
|
|