2015-11-29 3 views
0

Salut désolé codeur débutant ici et je ne suis pas bon à expliquer les choses très bien, mais je me demandais comment puis-je retourner le premier objet livre d'un tableau?renvoie le premier objet Livre écrit par un auteur avec ce prénom dans Array?

Voici mon code:

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; 
} 

Lorsque je teste ce code sur le compilateur BlueJ retourne un titre de l'auteur, mais pas la première instance de l'objet Book avec le firstName.

Voici la méthode que je dois utiliser:

public Book getBookWrittenBy(String firstName)

  • renvoie le premier objet Book écrit par un auteur avec ce prénom

Si quelqu'un peut me aider le code ce qui serait grandement apprécié. Merci d'avance.

+0

quelque chose de louche dans la jungle ici. Publiez la classe Book et comment vous déclarez et remplissez le tableau appelé inventory []. – DevilsHnd

Répondre

0

Je propose la solution suivante:

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; 
} 

Vous pouvez simplement retourner l'inventaire [i]; Cela quittera la boucle implicite et retournera la première instance d'un livre.

+0

Merci pour cette suggestion, mais quand je le fais, il renvoie un – Tre

+0

nul s'il vous plaît ajouter System.out.println ("Certains texte") avant chaque "retour null"; Pour voir lequel est utilisé .. Vous pouvez utiliser un débogueur toi. – Marcinek

0

Disposition légèrement différente. Lorsque vous quittez la méthode très tôt pour des entrées exceptionnelles, cela facilite le débogage du code et facilite la compréhension de la boucle. L'utilisation d'un pour chaque boucle simplifie également votre code.

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; 
} 
+0

Salut merci pour la suggestion, mais je ne peux pas utiliser un pour chaque boucle, je dois utiliser une boucle for. – Tre

0

Si vous venez de mettre l'instruction return dans le cycle for, vous retournerez à la première occurence ce que vous trouvez. À votre guise, vous retournez le dernier que vous trouvez, parce que vous attribuez un nouveau livre écrit par cet auteur à la variable écrite à chaque fois que vous en trouvez un. Essayez de réécrire le pour le cycle:

for(int i=0; i < inventory.length; i++){ 
if(inventory[i].getTitle().equals(firstName)) 
    return inventory[i]; 
} 
+0

Salut merci pour la suggestion, mais quand je fais cela, il renvoie toujours un livre de l'auteur ce que j'ai besoin de retourner est le premier livre sur mon tableau de l'auteur. – Tre

+0

Etes-vous sûr de remplacer votre cycle par celui-ci? Cela me semble étrange, celui-ci devrait retourner le premier résultat dans le tableau. – Matt

+0

Salut oui je l'ai fait ce qui se passe est il retourne le premier élément de l'Array et non le premier livre de l'auteur firstName – Tre

0

Je pense que vous devriez éviter de retourner null et il sera préférable d'utiliser Optional classe.

donc votre solution pourrait ressembler à:

public Optional<Book> getBookWrittenBy(String firstname) { 
    return Stream.of(inventory) 
     .filter(book -> firstname.equals(book.getAuthor())) 
     .findFirst();