返回作者在Array中使用此名字写的第一个Book对象?

时间:2015-11-29 18:56:04

标签: java arrays bluej getmethod

对不起初学者编码器,我不擅长解释事情,但我想知道如何返回数组的第一本书对象?

这是我的代码:

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对象

如果有人可以帮我编码,那将非常感激。提前谢谢了。

4 个答案:

答案 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();