作业的疑问

来源:1-9 经验总结

sioneden

2015-01-19 18:56

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

写回答 关注

3回答

  • sixGod
    2015-01-19 20:13:27
    已采纳

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

    sioned...

    多谢提示!错误已改正

    2015-01-19 20:28:22

    共 1 条回复 >

  • sioneden
    2015-01-19 20:29:45

    已修改代码

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


  • sixGod
    2015-01-19 20:06:00

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

Java入门第三季

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

409792 学习 · 4340 问题

查看课程

相似问题