【问题标题】:Possible loss of precision error可能丢失精度误差
【发布时间】:2013-11-16 15:53:13
【问题描述】:

我有这个问题,我正在创建一个三角形类,并且在一行代码中说 int[]y coord 我得到这个编译器错误,说可能会丢失精度需要 int found double 但我正在尝试添加正方形root(3)/2 到我的 get()y 所以这不是双倍的。

感谢您的帮助。

import java.awt.*;

public class Triangle extends Shape {
    private int leng;

    public Triangle(int x, int y, Color color, int leng) {
        super(x, y, color);
        this.leng=leng;
    }

    public void draw(Graphics g) {
        int[]Xcoord={getX(),getX()+leng,getX()+leng/2};
        int[]Ycoord={getY(),getY(),getY()+Math.sqrt(3)/(2.0)};
        g.drawPolygon(Xcoord,Ycoord,3);
    }

    public int getHeight() {
        return leng;
    }

    public int getWidth() {
        return leng;
    }
}

【问题讨论】:

  • root(3) 绝对是双倍的。

标签: java


【解决方案1】:

你的公式也不正确。单独使用 double 无法解决问题:

    double [] Xcoord = { getX(), (getX()+leng), getX()+leng/2 );
    double [] Ycoord = { getY(), getY(), getY()*(1.0+Math.sqrt(3)/(2.0)) };

【讨论】:

    【解决方案2】:

    3 的平方根不能表示为整数,因为它不是整数。制作数组double[]:

    double[] Xcoord = { getX(), getX() + leng, getX() + leng / 2.0};
    double[] Ycoord = { getY(), getY(), getY() + Math.sqrt(3) / (2.0)};
    

    顺便说一句,为了提高可读性,建议使用空格,因为我在我给出的代码中进行了修改。

    【讨论】:

    • 我认为这是有道理的。谢谢
    • 关心整数除法(即leng/2
    • 唯一的问题是我的 g.drawpolygon 方法需要一个 int 数组,我不知道该怎么做...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多