第一个输入方法的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()有影响,这是为什么呢?