第一個輸入方法的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()有影響,這是為什么呢?
2016-07-28
?//學生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);第二季作業碰到過這種情況,我是這樣解決的,還有很多其他辦法解決
2016-07-25
我與你有相同疑問
你要的答案在這里:
http://bbs.csdn.net/topics/390788856
2016-05-09
因為兩個Scanner使用的是同一個輸入流