2015-12-01 9 views
7

Sono nuovo di java. Ho cercato di fare qualcosa senza successo. Fondamentalmente quello che voglio fare è creare un metodo che restituisca vero o falso. Il metodo ottiene alcuni parametri, controlla se un certo array è pieno, se non spinge i parametri alla prima cella che non è vuota, restituisce true e NON continua a controllare il resto dell'array. Se la matrice è piena, restituisce semplicemente false. Questo è il codice:Restituisce true e quindi interrompe da un ciclo for

public boolean add(param1, param2, param3){ 
for(int i = 0; i < array.length; i++){ 
    if (array[i] == null){ 
    array[i] = new SomeObject(param1, param2, param3); 
    return true; 
    break; 
    } 
    } 
    return false; 
} 

ma ottengo degli errori "dichiarazione irraggiungibile" per "break;". Qualche aiuto?

Grazie in anticipo!

risposta

19

Poiché si dispone di una dichiarazione di reso, non è necessario break dal ciclo, poiché l'istruzione di reso termina l'esecuzione del metodo. Basta rimuovere la dichiarazione break.

+1

Grazie mille per il tuo commento. Quindi, fondamentalmente ogni volta che c'è una dichiarazione di ritorno nel metodo, termina l'esecuzione, anche se il ritorno è, per esempio, all'interno di 3 cicli annidati? – Avishay28

+2

@ Avishay28 yes, 'return' restituisce sempre il metodo. –

2

Poiché alcune persone insistono sul fatto che una funzione abbia un unico punto di ritorno, la funzione può essere riformulata come segue, facendo corrispondere l'aspettativa apparente della domanda originale.

public boolean add(param1, param2, param3){ 
    boolean result = false; 
    for(int i = 0; i < array.length; i++){ 
     if (array[i] == null){ 
      array[i] = new SomeObject(param1, param2, param3); 
      result = true; 
      break; 
     } 
    } 
    return result; 
} 
+0

Un approccio valido, sebbene capitalizzare 'Result' è un allontanamento stridente dalla convenzione. –

+0

Perché creare un'altra variabile? Com'è meglio allora il codice originale (senza la frase break ovviamente) – Avishay28

+0

Grazie per il commento, l'ho decapitalizzato per renderlo più socialista. – Codor

0

Sì, perché il momento in cui il controllo incontra un'istruzione di ritorno si arriva appena fuori di un metodo, switch o un ciclo, ecc in modo che qualsiasi codice scritto sotto l'istruzione return sarà solo "irraggiungibile". Quindi è sempre consigliabile inserire il ritorno all'ultimo blocco (di un metodo), se non richiesto ed è anche consigliabile non scrivere alcun codice dopo il restituire l'istruzione in un unico blocco per evitare di ricevere un errore.