#java
#java
Вопрос:
public class Geometry {
public static void main(String[] args) {
input(0.0, 0.0);
sphereVolume(0.0, 0.0);
sphereSurface(0.0, 0.0);
cylinderVolume(0.0, 0.0);
cylinderSurface(0.0, 0.0);
coneVolume(0.0, 0.0);
coneSurface(0.0, 0.0);
output(0.0, 0.0);
}
/**
* @param radius
* @param height
*/
public static void input(double radius, double height) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter radius r: ");
radius = sc.nextInt();
System.out.print("Enter height h: ");
height = sc.nextInt();
}
public static double sphereVolume(double radius, double height) {
double volume = (4 / 3) * Math.PI * Math.pow(radius, 3.0);
return volume;
}
public static double sphereSurface(double radius, double height) {
double surface = 4 * Math.PI * Math.pow(radius, 2.0);
return surface;
}
public static double cylinderVolume(double radius, double height) {
double volume = Math.PI * Math.pow(radius, 2.0) * height;
return volume;
}
public static double cylinderSurface(double radius, double height) {
double surface = 2 * Math.PI * radius * height 2 * Math.PI * Math.pow(radius, 2.0);
return surface;
}
public static double coneVolume(double radius, double height) {
double volume = (1 / 3) * Math.PI * Math.pow(radius, 2.0) * height;
return volume;
}
public static double coneSurface(double radius, double height) {
double surface = Math.PI * radius * (radius Math.pow(( Math.pow(radius, 2.0) Math.pow(height, 2.0)), .5));
return surface;
}
public static void output(double radius, double height) {
System.out.printf("Volume of sphere: %fn", sphereVolume(0.0, 0.0));
System.out.printf("Surface area of Sphere: %fn", sphereSurface(0.0, 0.0));
System.out.printf("Volume of cylinder: %fn", cylinderVolume(0.0, 0.0));
System.out.printf("Surface area of cylinder: %fn", cylinderSurface(0.0, 0.0));
System.out.printf("Volume of cone: %fn", coneVolume(0.0, 0.0));
System.out.printf("Surface area of cone: %fn", coneSurface(0.0, 0.0));
}
Моя проблема в том, что мой результат каждый раз равен 0.0, независимо от ввода. Я уверен, что это, вероятно, что-то простое, но, похоже, я не могу в этом разобраться. Не могли бы вы мне помочь? Большое спасибо 🙂 Я ценю ваше время.
Редактировать
Итак, я все еще получаю 0.0 для своего вывода, хотя я изменил свой код следующим образом:
public static void output(double radius, double height) {
System.out.printf("Volume of sphere: %.13fn", sphereVolume(radius, height));
System.out.printf("Surface area of Sphere: %.13fn", sphereSurface(radius, height));
System.out.printf("Volume of cylinder: %.13fn", cylinderVolume(radius, height));
System.out.printf("Surface area of cylinder: %.13fn", cylinderSurface(radius, height));
System.out.printf("Volume of cone: %.13fn", coneVolume(radius, height));
System.out.printf("Surface area of cone: %.13fn", coneSurface(radius, height));
}
Когда я вызываю свои функции в main(), выглядит так:
public static void main(String[] args) {
input(0.0, 0.0);
sphereVolume(0.0, 0.0);
sphereSurface(0.0, 0.0);
cylinderVolume(0.0, 0.0);
cylinderSurface(0.0, 0.0);
coneVolume(0.0, 0.0);
coneSurface(0.0, 0.0);
output(0.0, 0.0);
}
Нужно ли мне делать что-то другое здесь?
Ответ №1:
Вы делите целые числа:
public static double coneVolume(double radius, double height) {
double volume = (1 / 3) * Math.PI * Math.pow(radius, 2.0) * height;
return volume;
}
Целочисленное деление округляет в Java. Следовательно, 1 / 3
вычисляется до 0.
Измените его на:
double volume = (1. / 3.) * Math.PI * Math.pow(radius, 2.0) * height;
Вот другое явление:
double volume = (4 / 3) * Math.PI * Math.pow(radius, 3.0);
изменить на:
double volume = (4. / 3.) * Math.PI * Math.pow(radius, 3.0);
Редактировать :
Вы также вызываете все свои функции с 0.0
помощью . Поэтому, конечно, результаты будут равны нулю.
System.out.printf("Volume of sphere: %fn", sphereVolume(0.0, 0.0));
System.out.printf("Surface area of Sphere: %fn", sphereSurface(0.0, 0.0));
System.out.printf("Volume of cylinder: %fn", cylinderVolume(0.0, 0.0));
System.out.printf("Surface area of cylinder: %fn", cylinderSurface(0.0, 0.0));
System.out.printf("Volume of cone: %fn", coneVolume(0.0, 0.0));
System.out.printf("Surface area of cone: %fn", coneSurface(0.0, 0.0));
РЕДАКТИРОВАТЬ: еще одно предложение
Вероятно, вам не нужны все эти Math.pow()
вызовы, поскольку все они вызываются с помощью 2 или 3. Я бы сказал, что это, вероятно, более лаконично и читаемо (и быстрее?) чтобы просто сделать:
radius * radius height * height
вместо
Math.pow(radius, 2.0) Math.pow(height, 2.0)
ПРАВКА 2: дополнительные исправления:
Измените свой main
на это. И избавьтесь от input
функции:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter radius r: ");
double radius = sc.nextInt();
System.out.print("Enter height h: ");
double height = sc.nextInt();
output(radius, height);
}
Комментарии:
1. Аааа, я знал, что это что-то простое. РЕДАКТИРОВАТЬ — Ну, я только что изменил это, и у меня все еще та же ошибка.
2. @eleven357: Тогда вы, вероятно, все еще выполняете деление int, но где-то в другом месте. Почему бы не попробовать выполнить небольшую отладку, чтобы выяснить, где возникает ваша ошибка. Должен помочь отладчик или, в противном случае, инструкции println.
3. Вы также вызываете свои функции с
0.0
помощью . Я только что отредактировал это в своем ответе.4. Как мне вызвать мои функции с моими входными значениями для радиуса и высоты?
5. Я только что отредактировал его в своем ответе. Изучите ее, и вы поймете, почему она должна работать. (Хотя я ее не тестировал.)
Ответ №2:
Я не специалист по Java, но разве вы не должны хранить входные данные в каких-то глобальных переменных? Затем использовать эти переменные в качестве аргументов для ваших вызовов функций вместо 0.0? Например, этот код:
public static void output(double radius, double height) {
System.out.printf("Volume of sphere: %fn", sphereVolume(0.0, 0.0));
System.out.printf("Surface area of Sphere: %fn", sphereSurface(0.0, 0.0));
System.out.printf("Volume of cylinder: %fn", cylinderVolume(0.0, 0.0));
System.out.printf("Surface area of cylinder: %fn", cylinderSurface(0.0, 0.0));
System.out.printf("Volume of cone: %fn", coneVolume(0.0, 0.0));
System.out.printf("Surface area of cone: %fn", coneSurface(0.0, 0.0));
}
просто распечатает результаты этих вызовов функций с 0.0 в качестве входных данных, а не радиус / высота пользовательского ввода.
И, да, целочисленная математика не помогает.
Ответ №3:
Вы вводите ввод вручную и полагаетесь на свой Scanner
? Если да, то это ваша проблема. Значения из Scanner
присваиваются вашим параметрам в input()
и фактически нигде не сохраняются.
Все ваши другие методы вызываются с нулевыми входными данными, для которых выходные 0.0
данные фактически будут правильными (хотя это не означает, что у вас нет ошибок).
Ответ №4:
Создайте класс Cylinder; класс имеет атрибуты radius и height . В нем есть методы, которые вычисляют площадь поверхности цилиндра, называемую surfaceArea, и метод вычисления объема в дополнение к необходимым методам set и get
Примечание: для вычислений используйте следующие формулы: объем = (pi) r ^ 2 * h, где h — высота. площадь поверхности цилиндра = 2 * pi * радиус * радиус 2 * pi * радиус * высота Цилиндр — высота: с плавающей точкой — радиус: с плавающей точкой <> Цилиндр (r: с плавающей точкой, h: с плавающей точкой) объем () : с плавающей точкой Площадь поверхности () : с плавающей точкой setRad ( r: с плавающей точкой) getRad() : float setHeight(h: float) getHeight(): float
Комментарии:
1. Добро пожаловать в stackoverflow. Этот вопрос старый и на него уже был дан ответ. Как правило, лучше не воскрешать устаревшие темы, если ваш ответ не вносит что-то существенно новое или отличное от предыдущих ответов.
Ответ №5:
когда вы используете double, это должно быть sc.nextDouble() .
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter radius r: ");
double radius = sc.nextDouble();
System.out.print("Enter height h: ");
double height = sc.nextDouble();
}