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

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

Scanner中用nextInt(輸入非數字),產生異常后再執行輸入時的現象

package?test1;

import?java.util.Scanner;

public?class?test?{
	Scanner?cmd?=?new?Scanner(System.in);
	String?[]?bookName?=?{"高數","數據結構"};
	
	public??int?inputCommand(){
		int?command;
		try?{
			command?=?cmd.nextInt();
			return?command;
		}?catch?(Exception?e)?{
			cmd?=?new?Scanner(System.in);
			return?-1;
		}
	}
	
	public?String?searchSerial()?throws?Exception{
		System.out.println("輸入序號:");
		while(true)
		{
		try?{
		int?serial?=?cmd.nextInt();
			return?bookName[serial];
		}catch(Exception?e)?{
//			cmd?=?new?Scanner(System.in);??//如果注釋掉這一行就會發生圖中的錯誤
			throw?new?Exception("圖書不存在?s");
		}
		}
	}
	
	public?static?void?main(String[]?args)?{
		test?t?=new?test();
		while(true)
		{
			try?{
				System.out.println("輸入命令,1-按名稱查找,2-按序號查找");
				int?i=t.inputCommand();
				switch?(i)
				{
				case?2:
				{
					System.out.println("book:"+t.searchSerial());
					break;
				}
				case?-1:
				{
					System.out.println("命令輸入錯誤!請根據提示輸入數字命令!");
					continue;
				}
				default:
				{
					System.out.println("命令輸入錯誤!");
					continue;
				}
				}
				break;
			}catch(Exception?e)
			{
				System.out.println(e.getMessage());
				continue;
			}
		}
	}
}

注釋的那一行cmd?=?new?Scanner(System.in);


http://img1.sycdn.imooc.com//5a916bca0001b56701930185.jpg










取消注釋后結果

http://img1.sycdn.imooc.com//5a916c40000190ab01970158.jpg


請大神給我講講內部的原理,個人理解是輸入的值還被保存著但是不知道為啥在執行一次就沒了。。

正在回答

1 回答

在選擇圖書的時候拋出異常后,將異常捕獲后你有拋到外層了 然后在main的switch中被捕獲

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

Yme 提問者

cmd = new Scanner(System.in); //如果注釋掉這一行就會發生圖中的錯誤 如果注釋掉這一行,會彈出選擇圖書的異常,而且還會自己拋一次類型的異常,再出現輸入選擇類型 還是有點疑惑
2018-02-25 回復 有任何疑惑可以回復我~
#2

慕仔1173296 回復 Yme 提問者

我也有這個疑惑,請問樓主解決了么
2018-06-05 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

Scanner中用nextInt(輸入非數字),產生異常后再執行輸入時的現象

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

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

幫助反饋 APP下載

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

公眾號

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