第一個輸入方法的Scanner.close()會對下一個輸入方法的Scanner.next()有影響,為什么?
老師,我有個問題。 我自己本節(jié)課的寫代碼的時候有兩個方法都調(diào)用了Scanner console = new Scanner(System.in); 然后都寫在了console.close()這句話,編譯報錯說“?java.util.NoSuchElementException”。 當(dāng)我把第一個方法的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; ????//構(gòu)造函數(shù) ????public?MapTest(){ ????????students?=?new?HashMap<String,Student>(); ????} ????//學(xué)生ID姓名添加函數(shù) ????public?void?input(){ ????????int?i?=?0; ????????Scanner?scan?=?new?Scanner(System.in); ????????while(i?<?3){ ????????????System.out.println("請輸入學(xué)生ID"); ????????????String?ID?=?scan.next(); ????????????Student?st?=?students.get(ID); ????????????if(?st?==?null){ ????????????????System.out.println("請輸入學(xué)生姓名"); ????????????????String?name?=?scan.next(); ????????????????Student?S?=?new?Student(ID,name); ????????????????students.put(ID,S); ????????????????System.out.println("學(xué)生:"?+?students.get(ID).name?+?"已添加成功"); ????????????i++;???? ????????????}else{ ????????????????System.out.println("改學(xué)生姓名已被占用"); ????????????????continue; ????????????} ????????}???? ????????scan.close();?//(就是這里的問題,如果把這句話刪除,那刪除函數(shù)就可以正常進行,但是加上這句話有錯么,為什么會對刪除函數(shù)中的Scanner輸入函數(shù)有影響呢?) ????} //?鍵的測試函數(shù)???? ????public?void?testKey(){ ????????Set<String>?keySet?=?students.keySet(); ????????//學(xué)生容量 ????????System.out.println("總共有"?+?students.size()?+?"個學(xué)生"); ????????for(?String?stuId?:?keySet){ ????????????Student?st?=?students.get(stuId); ????????????if(st?!=?null){ ???????????????System.out.println("學(xué)生"?+?st.name);?????????????????? ????????????} ????????} ????} //?刪除測試函數(shù)???? ????public?void?testRemove(){ ????????Scanner?scan?=?new?Scanner(System.in); ????????while(true){ ????????????System.out.println("請輸入需要刪除的學(xué)生ID"); ????????????String?ID?=?scan.next(); ????????????Student?newst?=?students.get(ID); ????????????if(newst?==?null){ ????????????????System.out.println("請輸入需要刪除的學(xué)生ID"); ????????????????continue; ????????????} ????????????students.remove(ID); ????????????System.out.println("成功刪除的學(xué)生"?+?newst.name); ????????????// ????????????break; ????????}???????? ????} ???? ????//使用entrySet來遍歷Map ????public?void?testEntrySet(){ ????????Set<Entry<String,Student>>?setMap?=?students.entrySet();? ????????for(Entry<String,Student>?entry?:?setMap){ ????????????System.out.println("學(xué)生"?+?entry.getKey()?+?entry.getValue().name); ????????} ????} }
實例化兩個輸入類,他第一個Scanner類的console.close(),會對第二個Scanner類的 Scanner.next()有影響,這是為什么呢?
2016-07-28
第二季作業(yè)碰到過這種情況,我是這樣解決的,還有很多其他辦法解決
2016-07-25
我與你有相同疑問
你要的答案在這里:
http://bbs.csdn.net/topics/390788856
2016-05-09
因為兩個Scanner使用的是同一個輸入流