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

老师布置的课后习题,for循环中在条件满足的情况下没有执行if,只执行了else

Book类

package com.imooc.borrowBook;

public class Book {

public String bookName;

public int bookNum;

public Book(String bookName,int bookNum){

this.bookName = bookName;

this.bookNum = bookNum;

}

}


自定义异常类

package com.imooc.borrowBook;

public class NoExistException extends Exception {

public NoExistException(){

}

public NoExistException(String message){

super(message);

}

}


主类

package com.imooc.borrowBook;

import java.util.Scanner;

public class BookManager {

public static void main(String[] args) {

// TODO Auto-generated method stub

Book books[] = {new Book("高数",1),new Book("JavaEE",2),new Book("Html5",3),

       new Book("数据结构",4),new Book("C++",5),new Book("操作系统",6)};

while(true){

Scanner in = new Scanner(System.in);

System.out.println("请选择查找方式:");

System.out.println("1.按书名查找图书     2.按序号查找图书    3.退出");

try{

int num = in.nextInt();

if(num==1){

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

String num_1 = in.next();

//boolean name = false;

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

if(num_1.equals(books[i].bookName)){

System.out.println("book:"+books[i].bookName);

//name = true;

}else{

throw new NoExistException();

}

}

}else if(num==2){

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

int num_2 = in.nextInt();

//boolean number = false;

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

if(num_2 == books[i].bookNum){

System.out.println("book:"+books[i].bookName);

//number = true;

}else

throw new NoExistException();

}

}else if(num==3){

System.out.println("欢迎下次再来!");

System.exit(0);

}else 

throw new Exception();

//System.out.println("命令输入错误,请按提示输入!!!");

}

catch(NoExistException e){

//e.printStackTrace();

System.out.println("该图书不存在!");

System.out.println(); continue;

}catch(Exception e){

//e.printStackTrace();

System.out.println("命令输入错误,请按提示输入!!!");

System.out.println();

in.nextLine();//清空缓存区的中的数据

}

}

}

}


问题如下:

当我输入正确的序号或者书名时,程序没有执行循环中的if(条件满足的情况下),而是直接执行的else 报出异常,不知道怎么解决,请帮我解决下,感激不尽!!

正在回答

3 回答

我也遇到这样的问题了,原因是中文字符不能直接用equals判断是否相等,但具体解决方法我也还没找到。。。

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

在第一句else语句中加入if(i==books.length);

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

String num_1 = in.next();

//boolean name = false;

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

if(num_1.equals(books[i].bookName)){

System.out.println("book:"+books[i].bookName);

//name = true;

}else{

if(i==books.length)

throw new NoExistException();

}

按序号的可以这样改

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

int num_2 = in.nextInt();

//boolean number = false;

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

if(num_2 == books[i].bookNum){

flag=1;break;

//number = true;

}

}

if(flag==1){

System.out.println("book:"+books[i].bookName);

}else

throw new NoExistException();

}


0 回复 有任何疑惑可以回复我~
                    for(int i=0;i<books.length;i++){
                        if(num_1.equals(books[i].bookName)){
                            System.out.println("book:"+books[i].bookName);
                            name = true;
                        } else {
                            throw new NotExistException();

这里的逻辑有问题,你应该这循环完成后再判断是否没有找到,在每次循环中你是无法清楚知道你之前或者之后能否找到的。

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

泪在笑里哭 提问者

我尝试过在循环外报出异常可是那样也会出现另外一种问题:输入正确的书名,他会返回改书名但同时也会报异常
2017-04-16 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

老师布置的课后习题,for循环中在条件满足的情况下没有执行if,只执行了else

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