我是对象和类的新手。我正在创建这个测试程序以获得三角形的区域。我一直在0区域。我不知道我哪弄错了。
public class Project1 {
public static void main(String args[]) {
Triangle triangle1 = new Triangle();
System.out.println("The area of the triangle with base "
+ triangle1.base + "and with width "
+ triangle1.width + " is " + triangle1.getArea());
}
}
class Triangle {
double base = 1.0;
double width = 1.0;
double getArea() {
return 1 / 2 * base * width;
}
}
答案 0 :(得分:1)
更改以下内容
double getArea() {
return 1/2 * base * width;
}
要
double getArea() {
return 0.5 * base * width;
}
由于整数除法1/2产生0。
答案 1 :(得分:0)
您正在计算1 / 2
。
整数除法,不支持十进制值。它总是向零舍入,因此结果是
1 / 2 = 0
因此计算得到0
。
您可以通过除以十进制值而不是整数来修复它:
return 1.0 / 2.0 * base * width;
只要其中一个操作数是double
或float
之类的十进制值,就没有整数除法。您可以通过添加点来表示double
,例如2.0
。
或者,您可以从头开始使用小数值0.5
:
return 0.5 * base * width;
请注意,两个版本都同样快,因为编译器会在编译时预先计算这种常量计算。因此,两个版本的字节码都有0.5
。
答案 2 :(得分:0)
尝试在double
方法中使用getArea()
数字,如下所示:
double getArea() {
return 1.0 / 2.0 * base * width;
}
答案 3 :(得分:0)
这对Java初学者来说是一个很常见的错误,我承认我有时候会犯这个错误。在Java中将一个整数除以另一个整数时,结果也将是整数。因此,当您预期1/2为0.5时,结果将为0(即它被截断)。您可以先强制转换数字以强制除法使用float或double,如:
1 /(浮动)2
1 /(双)2
或使用简写:
1 / 2f
1 / 2d
其中f将数字转换为浮动,d加倍。