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

大神帮忙看看应该在哪一行抛出异常啊?谢谢!试了好几个位置,都不行

import java.util.Scanner;
import java.util.Arrays;
public class Tushuguan {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
System.out.println("欢迎使用图书管理系统!");
String []names={"语文","数学","英语","物理","化学"};//图书名称数组
int f=1;
do {
	System.out.println("输入命令:");
	System.out.println("按照名称查询图书请输入1;");
	System.out.println("按照序号查询图书请输入2");
	int num=input.nextInt();//输入命令序号
	try{
		if(num!=1&&num!=2){
			throw new Exception();
		}	
		}catch(Exception e){
		System.out.println("请输入正确的命令!");	
		}
	
			if(num==1){
				System.out.println("请输入图书名称:");
				String name=input.next();
				try{
				for(int i=0;i<names.length;i++){
					if(name.equals(names[i])){
						System.out.println(names[i]);
						
					}else{	
					throw new Exception();
					}}
					}catch(Exception e){
			    
				System.out.println("您查找的图书不存在!");
				continue;
					
					}
				}
		
		try{	
			if(num==2){
			System.out.println("请输入图书序号:");
			Arrays.sort(names);
			int nameNum=input.nextInt();
			
			if(nameNum<5){
				System.out.println(names[nameNum]);
				
			}else{
			throw new Exception();
			}
		}
			
	}catch(Exception e){
    
	System.out.println("您查找的图书不存在!");
continue;
	}	
}while(f==1);
input.close();
}		
}


正在回答

6 回答

你把那个else 改成这样else if(i==names.length)

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

晴颜 提问者

非常感谢!
2016-10-29 回复 有任何疑惑可以回复我~
#2

晴颜 提问者

改成这个我试了一下,好像程序也不太对,查找不存在的图书并不会上报“图书不存在”
2016-10-29 回复 有任何疑惑可以回复我~

package com.imooc;

import java.util.Scanner;

import java.util.Arrays;

public class Test {

  

    public static void main(String[] args) {

        // TODO Auto-generated method stub

Scanner input=new Scanner(System.in);

System.out.println("欢迎使用图书管理系统!");

String []names={"语文","数学","英语","物理","化学"};//图书名称数组

int f=1;

do {

    System.out.println("输入命令:");

    System.out.println("按照名称查询图书请输入1;");

    System.out.println("按照序号查询图书请输入2");

    int num=input.nextInt();//输入命令序号

    try{

        if(num!=1&&num!=2){

            throw new Exception();

        }  

        }catch(Exception e){

        System.out.println("请输入正确的命令!");   

        }

      

            if(num==1){

                System.out.println("请输入图书名称:");

                String name=input.next();

                try{

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

                    if(name.equals(names[i])){

                        System.out.println(names[i]);

                          

                    }else if(i==names.length){ 

                    throw new Exception();

                    }}

                    }catch(Exception e){

                  

                System.out.println("您查找的图书不存在!");

                continue;

                      

                    }

                }

          

        try{   

            if(num==2){

            System.out.println("请输入图书序号:");

            Arrays.sort(names);

            int nameNum=input.nextInt();

              

            if(nameNum<5){

                System.out.println(names[nameNum]);

                  

            }else  {

            throw new Exception();

            }

        }

              

    }catch(Exception e){

      

    System.out.println("您查找的图书不存在!");

continue;

    }  

}while(f==1);

input.close();

}      

}


0 回复 有任何疑惑可以回复我~
import java.util.Scanner;
import java.util.Arrays;
public class Tushuguan {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
System.out.println("欢迎使用图书管理系统!");
String []names={"语文","数学","英语","物理","化学"};//图书名称数组
int f=1;
do {
    System.out.println("输入命令:");
    System.out.println("按照名称查询图书请输入1;");
    System.out.println("按照序号查询图书请输入2");
    int num=input.nextInt();//输入命令序号
    try{
        if(num!=1&&num!=2){
            throw new Exception();
        }  
        }catch(Exception e){
        System.out.println("请输入正确的命令!");   
        }
     
            if(num==1){
                System.out.println("请输入图书名称:");
                String name=input.next();
                try{
                for(int i=0;i<names.length;i++){
                    if(name.equals(names[i])){
                        System.out.println(names[i]);
                         
                    }else{ 
                    throw new Exception();
                    }}
                    }catch(Exception e){
                 
                System.out.println("您查找的图书不存在!");
                continue;
                     
                    }
                }
         
        try{   
            if(num==2){
            System.out.println("请输入图书序号:");
            Arrays.sort(names);
            int nameNum=input.nextInt();
             
            if(nameNum<5){
                System.out.println(names[nameNum]);
                 
            }else{
            throw new Exception();
            }
        }
             
    }catch(Exception e){
     
    System.out.println("您查找的图书不存在!");
continue;
    }  
}while(f==1);
input.close();
}      
}


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

TT123456XY

点错了
2016-10-29 回复 有任何疑惑可以回复我~
#2

TT123456XY

不能删除楼层吗,
2016-10-29 回复 有任何疑惑可以回复我~

是不是因为在for循环里面,判断只有一次是正确,其他的n-1次都不对。有多次执行else语句,抛出异常。打印那句话啊。

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

晴颜 提问者

这个有可能,不过我放到for外面试了一下也是一直会抛出这个异常,感觉可能是抛出方法不太对,可是自己又查不出来
2016-10-29 回复 有任何疑惑可以回复我~

应该是异常抛出的使用方法有问题

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

晴颜 提问者

我的是不论哪种情况都会输出“您查找的图书不存在!”这个语句,你看看我写的那个,应该在哪一行抛出啊?
2016-10-28 回复 有任何疑惑可以回复我~
#2

芝麻馅的汉堡3374936 回复 晴颜 提问者

你查找书名的方法有问题,只要输入的不是names的第一项,程序就会进入else里面,直接抛出异常提示书名错误。 你需要设置一遍变量,来表示是否找到了书,找到了就改变这个量。你可以参考一下我找书的方法,设置了一个find为找到书的标志。初始化find为0表示还没找到,找到了就把find改为1.在for循环结束以后通过判断find是否为1来判断是否找到了书。 你的程序只要第一次不对就会进入else从而直接抛出异常,根本无法进入第二次判断。 另外你输入命令序号不能定义为int类型,否则一开始就输入非整数的话,程序就会因为输入数据类型错误直接报错无法继续运行了。
2016-10-30 回复 有任何疑惑可以回复我~
#3

晴颜 提问者 回复 芝麻馅的汉堡3374936

前几天迷在这了,不设置变量应该是是实现不了的,逻辑上会出问题;int f=1;这个设置方法是我看到其他人贴出来的代码有这样用的,就模仿了,其实我也不太明白这个。我再好好对比一下修改修改。谢谢你啦,昨天采纳了别人,不好意思啊,非常抱歉!
2016-10-30 回复 有任何疑惑可以回复我~
#4

芝麻馅的汉堡3374936 回复 晴颜 提问者

不紧张,我也是刚好在看视频的时候看到提问消息,自己刚完成这个作业。我想自己要是完全弄明白了应该也可以找出问题在哪里,哈,自己当时理解的也不到位,现在回头来看看明白了。采纳什么的都是小事,一起讨论讨论,大家之间相互增加一下理解才是收获哈
2016-10-30 回复 有任何疑惑可以回复我~
#5

晴颜 提问者 回复 芝麻馅的汉堡3374936

嗯嗯!
2016-10-30 回复 有任何疑惑可以回复我~
查看2条回复
//创建BadCommand异常类
package com.imooc;

public class BadCommand extends Exception{
public BadCommand(){
	
}
public BadCommand(String message){
	super(message);
}
}
//创建NoExist异常类
package com.imooc;

public class NoExist extends Exception {
	public NoExist(){
		
	}
	public NoExist(String message){
		super(message);
	}
}

//主程序
package com.imooc;
import java.util.*;
public class Borrowingsystem {

	String[] books={new String("高数"),new String("语文"),new String("英语"),new String("政治"),new String("历史")};
	Scanner input=new Scanner(System.in);
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub	
		Borrowingsystem borrow=new Borrowingsystem();	
		while(true){
			try{
				String choose=borrow.choice1();
				if(choose.equals("1")){
					try{//通过书名查书
						borrow.SearchBookName();
						break;
					}catch(NoExist e){
						System.out.println(e.getMessage());
					}
				}else if(choose.equals("2")){
					try {//通过序号查书
						borrow.SearchBookId();
						break;
					} catch (NoExist e) {
						// TODO: handle exception
						System.out.println(e.getMessage());
					}
				}
				
			}catch(BadCommand e){
				System.out.println(e.getMessage());
			}
		}
		

		
		
	}
	public String choice1() throws BadCommand{
		System.out.println("输入命令:1-按照名称查找图书;2-按照序号查找图书");
		
		String ip1=input.next();
		if(!ip1.equals("1")&&!ip1.equals("2")){
			throw new BadCommand("命令输入错误!请根据提示输入数字命令!");
		}
		return ip1;
	}
	
	public void SearchBookName() throws NoExist{
		System.out.println("输入图书名称:");
		
		String bookname=input.next();
		int findbook=0;
		for(int i=1;i<=books.length;i++){
			if(bookname.equals(books[i-1])){
				System.out.println("book:"+bookname);
				findbook=1;
			}
		}
		if(findbook==0){
			throw new NoExist("图书不存在!");
		}	
	}
	
	public void SearchBookId() throws NoExist{
		System.out.println("输入图书序号:");
		int bookid=input.nextInt();
		int findbook=0;
		if(bookid>=1&&bookid<=books.length){
			
			System.out.println("book:"+books[bookid-1]);
			findbook=1;
		}
		if(findbook==0){
			throw new NoExist("图书不存在");
		}
	}


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

晴颜 提问者

我的没有创建这个异常类,这个应该不是必须的吧
2016-10-28 回复 有任何疑惑可以回复我~
#2

芝麻馅的汉堡3374936 回复 晴颜 提问者

是的,不是必须的,一开始我理解的也不太好,第一次没看出你的问题在哪里,现在发现了,看我给你的另一条回复。
2016-10-30 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

大神帮忙看看应该在哪一行抛出异常啊?谢谢!试了好几个位置,都不行

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