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: %f\n", sphereVolume(0.0, 0.0));
System.out.printf("Surface area of Sphere: %f\n", sphereSurface(0.0, 0.0));
System.out.printf("Volume of cylinder: %f\n", cylinderVolume(0.0, 0.0));
System.out.printf("Surface area of cylinder: %f\n", cylinderSurface(0.0, 0.0));
System.out.printf("Volume of cone: %f\n", coneVolume(0.0, 0.0));
System.out.printf("Surface area of cone: %f\n", coneSurface(0.0, 0.0));
}
我的问题是我的输出每次都会产生0.0,无论输入如何。我敢肯定它可能很简单,但我似乎无法弄明白。你能帮帮我吗?非常感谢:)我感谢你的时间。
修改
所以即使我改变了我的代码,我的输出仍然是0.0:
public static void output(double radius, double height) {
System.out.printf("Volume of sphere: %.13f\n", sphereVolume(radius, height));
System.out.printf("Surface area of Sphere: %.13f\n", sphereSurface(radius, height));
System.out.printf("Volume of cylinder: %.13f\n", cylinderVolume(radius, height));
System.out.printf("Surface area of cylinder: %.13f\n", cylinderSurface(radius, height));
System.out.printf("Volume of cone: %.13f\n", coneVolume(radius, height));
System.out.printf("Surface area of cone: %.13f\n", 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);
}
我需要在这里做些不同的事吗?
答案 0 :(得分:4)
你要划分整数:
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: %f\n", sphereVolume(0.0, 0.0));
System.out.printf("Surface area of Sphere: %f\n", sphereSurface(0.0, 0.0));
System.out.printf("Volume of cylinder: %f\n", cylinderVolume(0.0, 0.0));
System.out.printf("Surface area of cylinder: %f\n", cylinderSurface(0.0, 0.0));
System.out.printf("Volume of cone: %f\n", coneVolume(0.0, 0.0));
System.out.printf("Surface area of cone: %f\n", 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 :(得分:0)
我不是Java人,但你不应该将输入存储到某种全局变量中吗?然后使用这些变量作为函数调用的参数而不是0.0?例如,这段代码:
public static void output(double radius, double height) {
System.out.printf("Volume of sphere: %f\n", sphereVolume(0.0, 0.0));
System.out.printf("Surface area of Sphere: %f\n", sphereSurface(0.0, 0.0));
System.out.printf("Volume of cylinder: %f\n", cylinderVolume(0.0, 0.0));
System.out.printf("Surface area of cylinder: %f\n", cylinderSurface(0.0, 0.0));
System.out.printf("Volume of cone: %f\n", coneVolume(0.0, 0.0));
System.out.printf("Surface area of cone: %f\n", coneSurface(0.0, 0.0));
}
将打印出那些函数调用的结果,其中0.0为输入,而不是半径/高度用户输入。
而且,是的,整数数学没有帮助。
答案 2 :(得分:0)
您是手动输入输入并依赖Scanner
吗?如果是这样,那就是你的问题。 Scanner
中的值将分配给input()
中的参数,而不是实际保存在任何位置。
你的其他方法都被调用,输入为零,0.0
的输出实际上是正确的(虽然这并不意味着你没有错误)。
答案 3 :(得分:0)
创建一个类Cylinder;该类具有属性radius和height。它有一些方法可以计算一个名为surfaceArea的圆柱体的表面积,另一种是计算体积以及所需方法和方法的方法
注意:使用以下公式进行计算: 体积=(pi)r ^ 2 * h其中h是高度。 圆柱体的表面积= 2 * pi *半径*半径+ 2 * pi *半径*高度 圆筒 - 身高:漂浮 - radius:float <> Cylinder(r:float,h:float) + volume():float + surfaceArea():float + setRad(r:float) + getRad():float + setHeight(h:float) + getHeight():float
答案 4 :(得分:0)
当你使用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();
}