Что не так с моим кодом? Расчет выходит неверный

Моя цель - взять ширину сферы, преобразовать ее в радиус, найти площадь в дюймах, а затем в футах. затем вычислить объем в дюймах, а затем в футах. область работает просто отлично, однако, когда она переходит к вычислению объема, она появляется в странной форме, а не в правильном числе

мои формулы и переменные выглядят нормально, поэтому я действительно не знаю, что делать дальше

System.out.println("Enter the width of the sphere: ");
    Scanner sc = new Scanner(System.in); // enables scanner
    p = sc.nextInt(); //scans user input for width
    q = 2; // var used to divide width by 2
    r = p/q; // user input divded by 2 to get radius 
    System.out.println("Division of the integers = "+r);
double pi = 3.14;
double r2 = r * r; // radius squared 
double r3 = r*r*r; // radius cubed
double a2 = 4 * pi * r2; // area formula
double volume = 4/3 * pi * r3; // volume formula for 
double v2g = 7.48; // gallons convert
System.out.println("the area of the sphere is:" + a2 );
System.out.println("the are of the sphere in feet is"+ a2 / 144);
System.out.println("the volume of the sphere in inches is" + volume);
System.out.println("the volume of the sphere in feet is" + volume / 1728);

Это вывод, который он считывает после того, как пользователь вводит ширину 400.

Введите ширину сферы: 400 Деление целых чисел = 200,0 (верно) площадь сферы: 502400,0 (верно) площадь сферы в футах 3488,8888888888887 (верно) объем сферы в дюймах 2. 512E7 (неверно) объем сферы в футах 14537,037037037036 (неверно) галлонов 1943,454149336502

я ожидаю, что выход сферы в дюймах будет около 33 493 333, а сферы в футах - около 19 383


person kubakyc    schedule 30.08.2019    source источник


Ответы (2)


4/3 равно 1, так как это целочисленное деление. Вместо этого вы должны использовать 4.0 / 3 (или любой другой способ выполнить деление с плавающей запятой).

Кстати, вы хотите использовать Math.PI: https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#PI

person Community    schedule 30.08.2019
comment
Спасибо, вы решили мою проблему. ценю помощь!!! - person kubakyc; 02.09.2019

Как сказано выше, 4/3 является целочисленным делением, оно делает 1 * pi * r3, что искажает ваши вычисления.

Вы можете сделать 4.0/3 или (double)4/3

Как предложено выше, вы также можете использовать Math.PI вместо того, чтобы вручную назначать 3,14 для pi, таким образом вы можете намного проще изменить точность вашего уравнения. Имейте в виду, что вам, вероятно, нужно округлить свои результаты или PI в вашем уравнении, иначе при их отображении вы получите абсурдно длинные числа:

the volume of the sphere in inches is 3.3493333333333332E7

Для этого вы можете использовать Math.Round:

System.out.println("the volume of the sphere in inches is" + Math.round(volume*1000)/1000);

Это будет отображаться как:

the volume of the sphere in inches is 33493333
person David    schedule 30.08.2019