图书管理系统的一个小步骤,写一个下午了

图书管理里的一个步骤,现在我要判断括号里的name是否在图书馆这个class的arrlist里存在,如果存在就返回一个i.getBook(),如果不存在就抛出一个异常,就是说我现在这样写每循环一次都会抛出一次异常,要怎么改呀,写一下午了

img

你可以尝试将 throw 语句放置在 for 循环外部。

public int getBook(String name) throws UnknownUserException {     
    for (IUser i : users) {
        if (name == i.getName()) {
            return i.getBook();
        }
    }
    throw new UnknownUserException("User" + name + "unknown.");
}

你的代码有以下几个问题:
1、明显少了半个大括号
2、加半个大括号加到哪里,按你说的每次循环都抛出异常,那说明你的括号把抛出异常放到了循环里,这样是不对的,应该放到热循环外,这样只有在匹配不到才会抛出异常,能匹配到直接就return了
3、i.getName()我猜测返回的应该是个字符串,那么就不能用==来判断,应该用equals判断是否相等
4、 i.getBook()按照你现在的方法定义,返回的是整形,我对这个持怀疑态度,你确定返回的不是字符串?如果是,那么方法返回值应该改为String类型

public int getBook(String name) throws UnknownUserException {     
    for (IUser i : users) {
        if (name.equals(i.getName())) {
            return i.getBook();
        }
    }
    throw new UnknownUserException("User" + i.getName() + "unknown.");
}

img

使用else
else {throe 你的异常语句}

代码改成如下格式

public Integer getBook(String name)(
    for (IUser i:users){
        if (name.equals(i.getName())){
            return i.getBook();
        }
        throw new RuntimeException("User"+ i.getName() +"unknown.");
    }
    return null;
}

单个String类型的name数据与String数组进行匹配是否在数组中(所有名字的数组),返回布尔值,如果是true,取name,如果是false,抛异常不就行了

1)直接给你上代码,有详细的注释,码字不易,望采纳



import java.util.ArrayList;
import java.util.List;

/**
 * @author pcj
 * @date 2022/5/5
 * @note
 */
public class T4 {
    public static void main(String[] args) {
        t("三国演义");
    }
    //初始化数据
    private static List<Book> bookList = new ArrayList();
    static {
        Book b1 = new Book(1, "三国演义");
        Book b2 = new Book(2, "水浒传");
        bookList.add(b1);
        bookList.add(b2);
    }
    //书类
    static class Book {
        private Integer book;
        private String name;

        public Book(Integer book, String name) {
            this.book = book;
            this.name = name;
        }

        public Integer getBook() {
            return book;
        }

        public void setBook(Integer book) {
            this.book = book;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

    /**
     * 根据书名查找
     * @param bookName
     * @return 找到则返回id,否则抛出异常
     */
    private static int t(String bookName){
        Boolean find = false;
        int i = -1;
        for (Book book : bookList){
            if (bookName.equals(book.getName())){
                i = book.getBook();
                find = true;
                break;
            }
        }
        if (find){
            System.out.println("找到了书:" + bookName);
            return i;
        }else{
            System.out.println("没有找到书:" + bookName);
            throw new RuntimeException("没有找到书:" + bookName);
        }
    }

}

2)运行结果

img

方法少了后大括号;异常不应该在循环里面抛;字符串比较不能用 == ;

Exception 换成你定义的异常


 return users.stream().filter(u -> u.getName().equals(name)).findAny().orElseThrow(new Exception("xxxx")).getBook();

img