Разница в результатах обусловлена приоритетом оператора. В Java умножение и деление имеют одинаковый приоритет и поэтому оцениваются слева направо.
Итак, ваш первый пример эквивалентен
double result = (4/3)*Math.PI*Math.pow(r,3);
Здесь, 4/3 является деление двух целых чисел, и в Java, в таких случаях выполняется целочисленное деление, с результатом 1. Для того, чтобы решить эту проблему , вы должны явно убедиться, что один или оба из операндов является двойной:
double result = (4.0/3.0)*Math.PI*Math.pow(r,3);
Ваш второй пример, однако, эквивалентно
double result = (Math.PI*Math.pow(r,3)*4)/3;
Здесь часть Math.PI*Math.pow(r,3)*4
оценивается как двойная, и поэтому у нас больше нет целочисленного деления, и вы получаете правильный результат.
1. форматирование, 2.целочисленное деление (4/3) и 3. порядок работы в java. Убедитесь, что эти три вещи проверены. –
Я просто исправил ваш формат и большую часть фразы. В следующий раз, пожалуйста, найдите время, чтобы сделать ваш вопрос презентабельным и читаемым. Используйте знаки пунктуации, символы верхнего регистра, где необходимо, и используйте теги кода, чтобы они были правильно подсвечены. – brimborium