第一个输入方法的Scanner.close()会对下一个输入方法的Scanner.next()有影响,为什么?
老师,我有个问题。 我自己本节课的写代码的时候有两个方法都调用了Scanner console = new Scanner(System.in); 然后都写在了console.close()这句话,编译报错说“ java.util.NoSuchElementException”。 当我把第一个方法的console.close();这句话删除后就正常了,请问在一个类的两个不同的方法中分别
package studentTest1;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
public class MapTest {
public Map<String , Student> students;
//构造函数
public MapTest(){
students = new HashMap<String,Student>();
}
//学生ID姓名添加函数
public void input(){
int i = 0;
Scanner scan = new Scanner(System.in);
while(i < 3){
System.out.println("请输入学生ID");
String ID = scan.next();
Student st = students.get(ID);
if( st == null){
System.out.println("请输入学生姓名");
String name = scan.next();
Student S = new Student(ID,name);
students.put(ID,S);
System.out.println("学生:" + students.get(ID).name + "已添加成功");
i++;
}else{
System.out.println("改学生姓名已被占用");
continue;
}
}
scan.close(); //(就是这里的问题,如果把这句话删除,那删除函数就可以正常进行,但是加上这句话有错么,为什么会对删除函数中的Scanner输入函数有影响呢?)
}
// 键的测试函数
public void testKey(){
Set<String> keySet = students.keySet();
//学生容量
System.out.println("总共有" + students.size() + "个学生");
for( String stuId : keySet){
Student st = students.get(stuId);
if(st != null){
System.out.println("学生" + st.name);
}
}
}
// 删除测试函数
public void testRemove(){
Scanner scan = new Scanner(System.in);
while(true){
System.out.println("请输入需要删除的学生ID");
String ID = scan.next();
Student newst = students.get(ID);
if(newst == null){
System.out.println("请输入需要删除的学生ID");
continue;
}
students.remove(ID);
System.out.println("成功删除的学生" + newst.name);
//
break;
}
}
//使用entrySet来遍历Map
public void testEntrySet(){
Set<Entry<String,Student>> setMap = students.entrySet();
for(Entry<String,Student> entry : setMap){
System.out.println("学生" + entry.getKey() + entry.getValue().name);
}
}
}实例化两个输入类,他第一个Scanner类的console.close(),会对第二个Scanner类的 Scanner.next()有影响,这是为什么呢?