Perché questo metodo restituisce 2 valori se ne chiedo solo uno e non esiste alcun tipo di istruzione condizionale da nessuna parte?

0

Sto scrivendo questo semplicissimo programma da questo unico PDF chiamato Think AP Java, e non riesco a spiegarmi questo:

Quando scrivo

public static double method_1(double x)
{
    double result =( x*(Math.exp(-x)  )    ) + (Math.sqrt(1-Math.exp(-x) )    );

    System.out.println(result);

    return result;  
}

Ottengo l'output di: 1.1629395387920924

Ma quando scrivo:

public static double multAdd(double a, double b, double c)
{

    double result = (a*b) +c;

    System.out.println(result);
    return result;
}

e

public static double method_2(double x)
{

    double result_1 =  (multAdd(1.0,  (Math.exp(-x)), 0.0)) ;
    double result_2 = (Math.sqrt(1.0-Math.exp(-x)));

    double final_result =  result_1 + result_2;
    System.out.println(final_result);

    return final_result;
}

L'output per method_2 è: 0.36787944117144233 E 1.1629395387920924, stampato direttamente l'uno sull'altro.

Che cosa può spiegare la causa di questo? Qualsiasi aiuto sarà molto apprezzato, dato che sono solo un principiante.

    
posta user3330471 11.07.2014 - 08:49
fonte

1 risposta

4

Quando chiami method_2 , stai anche chiamando implicitamente multAdd . Come per la definizione di multAdd , stai stampando il risultato di (a*b) + c) . Una volta che method_2 viene eseguito con la chiamata a multAdd , l'esecuzione procederà con il resto del codice nel tuo metodo.

Alla fine, raggiungerà l'istruzione print (simile a quello che hai nel metodo multAdd ). Una volta raggiunta questa linea, il programma stamperà la seconda riga. Questo è il motivo per cui hai due istruzioni di stampa quando chiami method_2 .

Se vuoi mostrare solo un risultato, ciò che dovresti fare sarebbe omettere le dichiarazioni di stampa dai tuoi metodi e lavorare con il valore restituito. Come puoi notare, tutti i tuoi metodi stanno riaccendendo il valore che stanno stampando.

Quindi potresti fare qualcosa del genere: System.out.println(method_1(arg1)); e System.out.println(method_2(arg1));

Il codice sopra riportato dovrebbe stampare solo due valori, che sono quelli che stai veramente cercando.

    
risposta data 11.07.2014 - 08:56
fonte

Leggi altre domande sui tag