实际和正式的参数列表长度不同,但我不明白为什么

时间:2014-05-11 16:06:13

标签: java compiler-errors

在我的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

2 个答案:

答案 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