第一個(gè)輸入方法的Scanner.close()會(huì)對(duì)下一個(gè)輸入方法的Scanner.next()有影響,為什么?
老師,我有個(gè)問題。 我自己本節(jié)課的寫代碼的時(shí)候有兩個(gè)方法都調(diào)用了Scanner console = new Scanner(System.in); 然后都寫在了console.close()這句話,編譯報(bào)錯(cuò)說“?java.util.NoSuchElementException”。 當(dāng)我把第一個(gè)方法的console.close();這句話刪除后就正常了,請(qǐng)問在一個(gè)類的兩個(gè)不同的方法中分別
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("請(qǐng)輸入學(xué)生ID"); ????????????String?ID?=?scan.next(); ????????????Student?st?=?students.get(ID); ????????????if(?st?==?null){ ????????????????System.out.println("請(qǐng)輸入學(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ù)就可以正常進(jìn)行,但是加上這句話有錯(cuò)么,為什么會(huì)對(duì)刪除函數(shù)中的Scanner輸入函數(shù)有影響呢?) ????} //?鍵的測(cè)試函數(shù)???? ????public?void?testKey(){ ????????Set<String>?keySet?=?students.keySet(); ????????//學(xué)生容量 ????????System.out.println("總共有"?+?students.size()?+?"個(gè)學(xué)生"); ????????for(?String?stuId?:?keySet){ ????????????Student?st?=?students.get(stuId); ????????????if(st?!=?null){ ???????????????System.out.println("學(xué)生"?+?st.name);?????????????????? ????????????} ????????} ????} //?刪除測(cè)試函數(shù)???? ????public?void?testRemove(){ ????????Scanner?scan?=?new?Scanner(System.in); ????????while(true){ ????????????System.out.println("請(qǐng)輸入需要?jiǎng)h除的學(xué)生ID"); ????????????String?ID?=?scan.next(); ????????????Student?newst?=?students.get(ID); ????????????if(newst?==?null){ ????????????????System.out.println("請(qǐng)輸入需要?jiǎng)h除的學(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); ????????} ????} }
實(shí)例化兩個(gè)輸入類,他第一個(gè)Scanner類的console.close(),會(huì)對(duì)第二個(gè)Scanner類的 Scanner.next()有影響,這是為什么呢?
2016-07-28
第二季作業(yè)碰到過這種情況,我是這樣解決的,還有很多其他辦法解決
2016-07-25
我與你有相同疑問
你要的答案在這里:
http://bbs.csdn.net/topics/390788856
2016-05-09
因?yàn)閮蓚€(gè)Scanner使用的是同一個(gè)輸入流