为了账号安全,请及时绑定邮箱和手机立即绑定

作业的疑问

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值进行判断。

正在回答

5 回答

你的代码错了,第一步你输入a后抛出异常,但被你捕获了,所以先执行了welcome(),再接着往下执行,也就是说你输入一个a时,你的if...else if同样还是被执行了

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

sioneden 提问者

多谢提示!错误已改正
2015-01-19 回复 有任何疑惑可以回复我~

已修改代码

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();
		}
	}

}


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

if...else if...本身就是正确执行一次后就不再执行别的判断了,所以你这边的问题应该是逻辑错误

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

举报

0/150
提交
取消
Java入门第三季
  • 参与学习       409792    人
  • 解答问题       4340    个

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

进入课程

作业的疑问

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信