Domanda Metodo java con return

Stato
Discussione chiusa ad ulteriori risposte.

Playspan

Utente Bronze
26 Aprile 2016
13
3
0
31
Ultima modifica:
Testo esercizio: Si realizzi una classe Java che abbia definito un metodo chiamato "divisibile" che accetta in ingresso due interi e restituisce "true" se il primo intero è divisibile per il secondo, "false" in caso contrario.
Salve a tutti volevo sapere se si può far stampare direttamente true o false senza aggiungere il println...Il risultato dell'esercizio lo ottengo lo stesso in questo modo... volevo sapere se c'è un metodo più semplificato. Si può anche usare un istruzione come return b > a; ma come posso far uscire in output il true o false? Grazie a tutti.
Java:
public static boolean divisibile(int a , int b){
      
        if ((b >= a) && (a!=0)){
            System.out.println("True");
            return true;
        }
            else {
                    System.out.println("False");
                    return false;
                    }
        }
 
Il modo più semplice per farlo è questo:
Java:
public static boolean divisibile(int a , int b) {
    return (a % b) == 0;
}

Generalmente non vuoi avere input e output all'interno di una funzione come questa. Questo genere di funzioni si costruiscono come utilities, l'input e l'output lo metti nel main o da qualche altra parte perché non è detto che ogni volta che richiami quella funzione vuoi far apparire qualcosa sul terminale.
Per esempio potresti sfruttare questa funzione per dire se un numero è pari o dispari (a è divisibile per 2?), in questo caso non avresti interesse a leggere "true" o "false" sul terminale, sarebbe meglio "pari" o "dispari". Oppure potresti sfruttare questa funzione per calcolare se un numero è primo, la dovresti richiamare tante volte e far apparire scritte sul terminale renderebbe tutto molto poco chiaro.
In ogni caso: no, non è possibile far apparire "true" o "false" sul terminale senza usare la println (o la print, o qualcosa di equivalente).
 
Ciao!
Allora scusami ma non ho capito benissimo cosa chiedi :)

1)L'esercizio non ti richiede una stampa a video.

2)Se vuoi aggiungere una stampa a video, il println dovresti metterlo nel metodo main, del tipo:
public static void main(String[] args){
...
...
if( divisibile(a,b) == true ) System.out.println(a +"risulta divisibile per"+ b);
else System.out.println("Non puoi dividere "+ a +"per "+ b);
}
Il metodo divisibile ha un compito: quello di restituire true o false, meglio non fargli fare stampe a video..
(Se non ti piace questo main, puoi guardare giù al punto 4)

3)Il metodo divisibile (lasciando stare il println) è errato, dovrebbe essere:
public static void divisibile (int a, int b){
if( (b!=0) && (a%b == 0) )
return true;
return false; //qui l' else è facoltativo essendoci un if-return sopra..​
}​

4) Potresti impostare il main anche cosi:
public static void main(String[] args){
int a = 6;
int b = 2;
System.out.println( divisibile(a,b) );
// stampa true perchè 6 è divisibile per 2

int c = 7;
int d = 2;
System.out.println( divisibile(c,d) );
// stampa false perchè 7 non è divisibile per 2​
}
Se hai dubbi non esitare a chiedere :)
 
Mhmmm capisco! Grazie delle risposte. Mi avete consigliato di non mettere nel metodo il println ma la ma domanda ora è: i metodi non servono per semplificarti le cose? Quindi perché non metterlo direttamente il println... Soul_Code ho visto che hai usato una classe void che restituisce un return di tipo booleano e questo genera un errore o mi sbaglio?
 
E' una questione concettuale. Nessuno ti vieta di farlo ma è sbagliato.
Le funzioni devono essere fatte nel modo più generico possibile così chiunque abbia bisogno di fare quella stessa cosa, può prenderla e usarla così come sta.
Per questo motivo è meglio se fai ritornare solo vero o falso e fai, successivamente, stampare qualcosa a video.

Soul_Code ho visto che hai usato una classe void che restituisce un return di tipo booleano e questo genera un errore o mi sbaglio?
Si, una void non può contenere un return
 
Mhmmm capisco! Grazie delle risposte. Mi avete consigliato di non mettere nel metodo il println ma la ma domanda ora è: i metodi non servono per semplificarti le cose? Quindi perché non metterlo direttamente il println... Soul_Code ho visto che hai usato una classe void che restituisce un return di tipo booleano e questo genera un errore o mi sbaglio?
Si scusa, ho scritto in fretta.. ovviamente è:
public static boolean divisibile (int a, int b){
..
Non avrebbe senso void :) pardon!
 
Si scusa, ho scritto in fretta.. ovviamente è:
public static boolean divisibile (int a, int b){
..
Non avrebbe senso void :) pardon!
Java:
public static boolean divisibile (int a, int b){
            boolean isDivisibile = false;
            if((b >= a)&&(a!=0)){
               isDivisibile = true;
             }
//nel caso che non sia divisibile la variabile isDivisibile è già false (cosi si risparmia un else)
return isDivisibile;
}
 
Stato
Discussione chiusa ad ulteriori risposte.