Lesso 14 – Java for Beginners

Vedere video: https://www.youtube.com/watch?v=jEb8HfrMx4Q&list=PLv6UtFrA7VEu4PtzJaGHHSeZBi6mdJtwv&index=14

Continuiamo con getBooksForPerson(). Prima di tutto creiamo una ArrayList<Book> che chiamiamo result. Sarà la lista che sarà ritornata dal metodo.  Poi usiamo un loop di tipo for per analizzare tutti i libri della biblioteca, per vedere quelli che sono stati prestati alla persona. Selezioniamo foreach dai suggerimenti di Eclipse e scriviamo for (Book abook : this.getBooks) dove aBook è il nome della variabile locale e this.getBooks è la lista di tutti i libri della biblioteca. Questo significa fare il foreach per ogni aBook in this.getBooks().

Se il libro è in prestito (cioè se il campo person del libro non è null) e se il nome del campo person è uguale al nome di p1, allora dobbiamo aggiungere il libro alla lista. Per fare questo mettiamo un ciclo if (vedi codice).  Alla fine return result, attenzione a metterlo fuori dal loop. Dato che abbiamo due condizioni di if, abbiamo introdotto &&, che è l’END logico.

NOTA: abbiamo usato .equals() come metodo di confronto. Infatti questo è il metodo di confronto di oggetti, e le stringhe sono oggetti. Il == si usa solo per primitive, come int, double, char, boolean).

Se facciamo il run JUnit del test, naturalmente il testCheckOut fallisce, perché non lo abbiamo ancora completato, però il testGetBooksForPerson() sì.  Osservazione: perché dobbiamo fare, nel loop for, il controllo che non sia null? Se togliamo questo controllo abbiamo un errore di runtime (nullPointerException). Questo si verifica ogni volta che tentiamo di eseguire un metodo su un oggetto null.

Adesso possiamo completare il metodo checkOut(). Definiamo la variabile locale di tipo int bookOut = this.getBooksForPerson(p1); è il numero di libri che p1 ha in prestito. Per rendere il codice più leggibile, poiché dobbiamo aggiungere una condizione nell’if, mettiamo la doppia parentesi e aggiungiamo && (bookOut < p1.getMaximumBooks()).  Facciamo il rerun e funziona!

Aggiungiamo questo test alla suit, aggiungendo in AllTest la riga suite.addTestSuite(MyLibraryTest.class); . E funziona!

Lascia un commento