package sentBook; import java.util.Arrays; import java.util.InputMismatchException; import java.util.Scanner; public class sentBook { String[] book = new String[]{"你好,中国", "九型人格", "Java123", "面向对象编程", "美文如歌"}; Scanner scan = new Scanner(System.in); public static void main(String[] args) { // TODO Auto-generated method stub sentBook sent = new sentBook(); sent.welcome(); } /*欢迎界面 *同时对输入进行校验 */ public void welcome(){ System.out.println("输入命令:1-按照名称查找图书;2-按照序号查找图书;"); int select = 0; try{ select = new Scanner(System.in).nextInt(); }catch(InputMismatchException e){ System.out.println("命令输入错误!请按照提示输入数字命令!"); this.welcome(); } try{ if(select == 1 ){ this.sentName(); }else if(select == 2){ this.sentNum(); }else if(select == 0){ System.out.println("fuck!"); } else{ throw new Exception(); } }catch(Exception e){ System.out.println("请按照提示输入正确命令!"); this.welcome(); } return; } /* * 按名称查书 */ public void sentName(){ System.out.println("输入图书名称:"); String name = scan.next(); String books = Arrays.toString(book); if(books.indexOf(name) != -1){ System.out.println("book:" + name); }else{ System.out.println("图书不存在!"); this.welcome(); } } /* * 按序列号查书 */ public void sentNum(){ System.out.println("输入图书序号:"); int num = scan.nextInt(); if(num <= book.length+1){ System.out.println("book:" + book[num - 1]); }else{ System.out.println("图书不存在!"); this.welcome(); } } }
代码如图所示,现在有一个问题,具体的输出如下:
输入命令:1-按照名称查找图书;2-按照序号查找图书;
a
命令输入错误!请按照提示输入数字命令!
输入命令:1-按照名称查找图书;2-按照序号查找图书;
1
输入图书名称:
九型人格
book:九型人格
fuck!
最开始是因为发现一个问题,如果第一次输入错误,那么在正确的输入以及查询结束后,会继续循环一次查询。利用断点调试发现,第一次输入错误并之后正确执行了一次查询后,会继续对输入的select值进行判断,而且是默认的0。如果把这个默认的select赋值去掉的话,程序会报错。
想请教一下,怎样才能在正确执行一次查询后直接结束程序,而不是继续对select值进行判断。
你的代码错了,第一步你输入a后抛出异常,但被你捕获了,所以先执行了welcome(),再接着往下执行,也就是说你输入一个a时,你的if...else if同样还是被执行了
已修改代码
package sentBook; import java.util.Arrays; import java.util.InputMismatchException; import java.util.Scanner; public class sentBook { String[] book = new String[]{"你好,中国", "九型人格", "Java123", "面向对象编程", "美文如歌"}; Scanner scan = new Scanner(System.in); public static void main(String[] args) { // TODO Auto-generated method stub sentBook sent = new sentBook(); sent.welcome(); } /*欢迎界面 *同时对输入进行校验 */ public void welcome(){ System.out.println("输入命令:1-按照名称查找图书;2-按照序号查找图书;"); int select = 0; try{ select = new Scanner(System.in).nextInt(); if(select == 1 ){ this.sentName(); }else if(select == 2){ this.sentNum(); }else if(select == 0){ System.out.println("fuck!"); } else{ throw new Exception(); } }catch(InputMismatchException e){ System.out.println("命令输入错误!请按照提示输入数字命令!"); this.welcome(); }catch(Exception e){ System.out.println("请按照提示输入正确命令!"); this.welcome(); } return; } /* * 按名称查书 */ public void sentName(){ System.out.println("输入图书名称:"); String name = scan.next(); String books = Arrays.toString(book); if(books.indexOf(name) != -1){ System.out.println("book:" + name); }else{ System.out.println("图书不存在!"); this.welcome(); } } /* * 按序列号查书 */ public void sentNum(){ System.out.println("输入图书序号:"); int num = scan.nextInt(); if(num <= book.length){ System.out.println("book:" + book[num - 1]); }else{ System.out.println("图书不存在!"); this.welcome(); } } }
if...else if...本身就是正确执行一次后就不再执行别的判断了,所以你这边的问题应该是逻辑错误