0

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

这是我的代码:

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 编译器上测试这段代码时,它会返回 Author 的标题,但不会返回Book带有firstName.

这是我需要使用的方法:

public Book getBookWrittenBy(String firstName)

  • 返回Book由具有此名字的作者编写的第一个对象

如果有人可以帮助我编写此代码,将不胜感激。提前谢谢了。

4

4 回答 4

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 循环并返回一本书的第一个实例。

于 2015-11-29T19:05:16.253 回答
0

如果您只是将 return 语句放在 for 循环中,您将在第一次出现时返回您找到的内容。按照您的方式,您将返回您找到的最后一本,因为您每次找到一本由该作者撰写的新书时都将其分配给变量writtenBy。尝试重写for循环:

for(int i=0; i < inventory.length; i++){
if(inventory[i].getTitle().equals(firstName))
    return inventory[i];
 }
于 2015-11-29T19:09:15.620 回答
0

布局略有不同。当您在异常输入时提前退出该方法时,它有助于调试代码并使循环更易于理解。使用 for each 循环也可以简化您的代码。

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;
}
于 2015-11-29T19:07:09.030 回答
0

我认为你应该避免返回,使用类null会更好。Optional

因此,您的解决方案可能如下所示:

public Optional<Book> getBookWrittenBy(String firstname) {
    return Stream.of(inventory)
        .filter(book -> firstname.equals(book.getAuthor()))
        .findFirst();
于 2015-11-29T21:14:36.870 回答