在我的Java课程中,有一个练习用于创建一个名为Area的类,其中包含4个重载构造函数,用于计算圆形,三角形,矩形或cillinder的区域。
解决了6个错误之后,我还剩3个。
这是我使用的代码:
import java.lang.Math;
class Area {
public double pi = Math.PI;
private int b, l, w, area;
private double r, h;
public Area(){
}
public Area(double radio){
r = radio;
area = pi * r * r;
}
public Area(int base, double alt){
b = base;
h = alt;
double o5 = 0.5;
double db = (double) b;
area = o5 * db * h;
}
public Area(int lar, int anc){
l = lar;
w = anc;
area = l * w;
}
public Area(double radio, double alt){
r = radio;
h = alt;
area = pi * r * r * h;
}
}
public class JavaCLab2P144 {
/**
* @param args
*/
public static void main(String[] args){
Area circ = new Area(4.0);
Area tria = new Area(6,3.0);
Area rect = new Area(2,4);
Area cili = new Area(4.0,10.0);
System.out.println("Area de un circulo:\t" + circ);
System.out.println("Area de un triangulo:\t" + tria);
System.out.println("Area de un rectangulo:\t" + rect);
System.out.println("Area de un cilindro:\t" + cili);
}
}
这是我得到的错误:
java/JavaCLab2P144/JavaCLab2P144.java:14: error: possible loss of precision
area = pi * r * r;
^
required: int
found: double
java/JavaCLab2P144/JavaCLab2P144.java:22: error: possible loss of precision
area = o5 * db * h;
^
required: int
found: double
java/JavaCLab2P144/JavaCLab2P144.java:34: error: possible loss of precision
area = pi * r * r * h;
^
required: int
found: double
3 errors
答案 0 :(得分:0)
您不能隐式地将double转换为它,因为您可能会在错误指示时丢失精度。你需要使用强制转换操作符对它进行显式强制转换:(int)在赋值运算符之后,并且根据操作的顺序,你应该将parens放在乘法中,如此
Area =(int)(pi * r * r);
在你的班级中还有许多其他问题要考虑,例如选择区域而不是双倍,因为结果是双倍的。正如其他海报所说,你应该使用双倍代替区域字段。您也不需要为pi声明变量,因为它已经是数学上的静态成本或至少使其成为私有静态最终
答案 1 :(得分:0)
问题是double可以有像1.5这样的值,如果你想要改成int可能是1或2(或者只是你在编码时的错误)。所以java告诉你,你必须对它做点什么。
要解决此问题,您可以将double转换为int,切换为全数
double x = 1.2;
double y = 1.7;
int a = (int) x; // a == 1
int b = (int) y; // b == 1
其他选项(在你的情况下更好)是使用Math#round(double)函数
double x = 1.2;
double y = 1.7;
// Math.round(double) return long, so you also have to cast it into int
int a = (int) Math.round(x); // a == 1
int b = (int) Math.round(y); // b == 2