对不起初学者编码器,我不擅长解释事情,但我想知道如何返回数组的第一本书对象?
这是我的代码:
public Book getBookWrittenBy(String firstName){
Book writtenBy = null;
if((inventory == null) || (inventory.length == 0)){
return null;
}
for(int i=0; i < inventory.length; i++){
if(inventory[i] != null && writtenBy == null || inventory[i].getTitle().equals(firstName)){
writtenBy = inventory[i];
}
}
return writtenBy;
}
当我在BlueJ编译器上测试此代码时,它会从作者返回一个标题,但不会返回Book
firstName
对象的第一个实例。
以下是我需要使用的方法:
public Book getBookWrittenBy(String firstName)
Book
对象
如果有人可以帮我编码,那将非常感激。提前谢谢了。
答案 0 :(得分:0)
我建议采用以下解决方案:
public Book getBookWrittenBy(String firstName){
if((inventory == null) || (inventory.length == 0)){
return null;
}
for(int i=0; i < inventory.length; i++){
if(inventory[i] != null && inventory[i].getTitle().equals(firstName)){
return inventory[i];
}
}
return null;
}
您只需退回库存[i];这将退出for循环隐式并返回书籍的第一个实例。
答案 1 :(得分:0)
布局略有不同。当您在特殊输入的早期退出方法时,它有助于调试代码并使循环更容易理解。对每个循环使用a也简化了代码。
interface Book {
String getFirstNameOfAuthor()
String getLastNameOfAuthor()
}
public Book getBookWrittenBy(Book[] inventory, String firstName) {
if (null == inventory || null == firstName) return null;
for (Book book : inventory) {
if (firstName.equals(book.getFirstName)) return book;
}
return null;
}
答案 2 :(得分:0)
如果您只是将return语句放在for循环中,那么您将在第一次出现时返回。按照你的方式,你将返回你找到的最后一本,因为你每次找到一本书时都会将该作者写的新书分配给变量。尝试重写for循环:
for(int i=0; i < inventory.length; i++){
if(inventory[i].getTitle().equals(firstName))
return inventory[i];
}
答案 3 :(得分:0)
我认为你应该避免返回null
,最好使用Optional
类。
所以你的解决方案看起来像:
public Optional<Book> getBookWrittenBy(String firstname) {
return Stream.of(inventory)
.filter(book -> firstname.equals(book.getAuthor()))
.findFirst();