La differenza nel risultato è dovuta alla precedenza dell'operatore. In Java, la moltiplicazione e la divisione hanno la stessa precedenza e quindi vengono valutate da sinistra a destra.
Così, il vostro primo esempio è equivalente a
double result = (4/3)*Math.PI*Math.pow(r,3);
Qui, 4/3 è una divisione di due numeri interi, e in Java, in questi casi, viene eseguita la divisione intera, con esito 1. Per risolvere questo , si deve fare in modo esplicito in modo che uno o entrambi degli operandi è un doppio:
double result = (4.0/3.0)*Math.PI*Math.pow(r,3);
tuo secondo esempio, invece, è equivalente a
double result = (Math.PI*Math.pow(r,3)*4)/3;
Qui, la parte Math.PI*Math.pow(r,3)*4
viene valutata come doppia, quindi non abbiamo più divisione intera e si ottiene il risultato corretto.
1. formattazione, 2.divisione intera (4/3) e 3. ordine di funzionamento in java. Assicurati che queste 3 cose siano controllate. –
Ho appena corretto il formato e la maggior parte del fraseggio. Per la prossima volta, prenditi il tuo tempo per rendere la tua domanda presentabile e leggibile. Usa la punteggiatura, caratteri maiuscoli, se necessario, e usa i tag del codice, in modo che vengano evidenziati correttamente. – brimborium