亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

第一個輸入方法的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()有影響,這是為什么呢?

正在回答

3 回答

?//學生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);

第二季作業碰到過這種情況,我是這樣解決的,還有很多其他辦法解決

0 回復 有任何疑惑可以回復我~

我與你有相同疑問

你要的答案在這里:

http://bbs.csdn.net/topics/390788856

0 回復 有任何疑惑可以回復我~

因為兩個Scanner使用的是同一個輸入流

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

第一個輸入方法的Scanner.close()會對下一個輸入方法的Scanner.next()有影響,為什么?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號