图书管理里的一个步骤,现在我要判断括号里的name是否在图书馆这个class的arrlist里存在,如果存在就返回一个i.getBook(),如果不存在就抛出一个异常,就是说我现在这样写每循环一次都会抛出一次异常,要怎么改呀,写一下午了
你可以尝试将 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.");
}
使用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)运行结果
方法少了后大括号;异常不应该在循环里面抛;字符串比较不能用 == ;
Exception 换成你定义的异常
return users.stream().filter(u -> u.getName().equals(name)).findAny().orElseThrow(new Exception("xxxx")).getBook();