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

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

作業。scanner怎么不能關閉

package try_catch;

import java.util.Scanner;

public class TryCatchPractice2 {

//在類開始聲明,則其他方法都能調用

Scanner in=new Scanner(System.in);

NoBookException NoB=new NoBookException();

String[] books={"語文","數學","英語"};

static TryCatchPractice2 trycat=new TryCatchPractice2();

//主函數

public static void main(String[]args) throws Exception{

trycat.InputClassException();

}

//命令錯誤

public void InputClassException()throws Exception{

????try{

????????System.out.println("歡迎光臨本圖書管理系統");

????????System.out.println("1.書名查詢。2.序號查詢");

????????int a=in.nextInt();

????????switch(a){

????????????case 1: //查找圖書

????????????????trycat.findBooks();

????????????break;

????????????case 2://查找序號

????????????????trycat.findBooksNum();

????????????break;

????????????default:

????????????????throw new NoBookException("錯誤命令,請輸入整數1或2");//如果輸入數字非1,2則拋出

???????????}

????}catch(NoBookException e){

// InputMismatchException InE=new InputMismatchException();

// InE.initCause(e);

// 求教如何在掃描儀我輸入非int型時會提示錯誤命令,例如a

????????e.printStackTrace();

????????System.out.println("請重新輸入:");

????????InputClassException();

????}catch(Exception e){

????????backRoll();

????}

????}

//當輸入值為非整數時,調用此方法//不要問我為什么另外新建一個方法,只是因為提示變紅字

public void backRoll() throws Exception{

???? try{

???????? throw new Exception("錯誤命令,請輸入整數");

???? }catch(Exception e){

???? ???? e.printStackTrace();

???? ???? in.next();

???? ???? System.out.println("請重新輸入:");

???????? InputClassException();

???? }

}

//查找圖書

public void findBooks()throws Exception{

????System.out.println("請輸入您要查詢的圖書:");

????String b=in.next();

????boolean flag=false;

????try{

???????? for(int i=0;i<books.length;i++){

???????????????? if(b.equals(books[i])){//如果查詢的書名不為空,輸出書本信息

???????????????? System.out.println("查詢成功"+books[i]);

???????????????? flag=true;

???????????????? }

????????????}

????????????while(flag==false){//如果查詢為空,拋出異常

????????????throw new NoBookException("圖書不存在");

????????????}

????}catch(NoBookException e){

????????e.printStackTrace();//捕捉到異常后輸出異常位置

????????NoB.initCause(e);

????????System.out.println("請重新輸入:");

????????InputClassException();//重新進入系統

????}

}

//查找序號

????public void findBooksNum()throws Exception{

???? System.out.println("請輸入您要借閱的圖書序號:");

???? int i=in.nextInt();

???? try{

???????? if(i<books.length&&i>=0){//如果查詢的序號不越界,輸出書本信息

???????????? System.out.println("查詢成功");

???????????? System.out.println("您查詢的是"+books[i]);

???????? }else{//越界則拋出數組越界異常

???????????? throw new NoBookException("序號錯誤");

???????? }

???? }catch(NoBookException e){

???????? e.printStackTrace();//捕捉到異常后輸出異常位置

???????? NoB.initCause(e);

???????? System.out.println("請重新輸入:");

???????? InputClassException();//重新進入系統

???? }

????}

//in.close();//為什么這里打in.close.關閉掃描儀會報錯

}



正在回答

1 回答

代碼沒有用代碼語言格式上傳確實有點閱讀困難,沒有全部仔細看完實在不好意思。但是我個人也遇到類似問題,查了相關資料有些見解,希望能夠解答你的問題。

首先,Scanner對象在關閉時,也會自動調用它的輸入流進行關閉,也就是scanner.close()的時候,會導致System.in的關閉。所以scanner不能再次獲取輸入。所以建議是:全局使用一個scanner對象,并且只在整個程序運行結束的時候只關閉一次scanner。

具體的可以參考這篇博客,我覺得記載得很詳細。scanner注意要項

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

舉報

0/150
提交
取消
Java入門第三季
  • 參與學習       409767    人
  • 解答問題       4543    個

Java中你必須懂得常用技能,不容錯過的精彩,快來加入吧

進入課程

作業。scanner怎么不能關閉

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

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

幫助反饋 APP下載

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

公眾號

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