检查三角形是否是直角三角形

Fra*_*ter 4 java

我试图检查一个三角形是否是Java中的直角三角形.这是测试人员类的一部分:

    Triangle a = new Triangle(new Point(2, 2), new Point(6, 2), new Point(2, 6) );
    System.out.println(a.isRight()); //Expects True
Run Code Online (Sandbox Code Playgroud)

我的三角形类的一部分接收值并将它们设置为x1,y2等:

    public Triangle(Point loc1, Point loc2, Point loc3) {
    x1 =  loc1.getX(); y1 =  loc1.getY();
    . . .
Run Code Online (Sandbox Code Playgroud)

前两段代码都是给我的.我要做的最后一段代码是我做的:

    public boolean isRight() {
        if((Math.pow(side1,2)+Math.pow(side2,2)) == Math.pow(side3,2))
            return true;
        if((Math.pow(side2,2)+Math.pow(side1,2)) == Math.pow(side3,2))
            return true;
        if((Math.pow(side3,2)+Math.pow(side2,2)) == Math.pow(side1,2))
            return true;
        else
            return false;
    }
Run Code Online (Sandbox Code Playgroud)

但是,它仍然返回false.我究竟做错了什么?谢谢你!

更新:感谢您的帮助.我似乎犯了一个相当noob-ish的错误.我从来没有想过双打不是很准确的事实(对不起,只是想用简单的方式说出我做了什么).我最后输入了这个:

        if(Math.abs(side1*side1 + side2*side2 - side3*side3) < 0.2)
        return true;
    if(Math.abs(side1*side1 + side3*side3 - side2*side2) < 0.2)
        return true;
    if(Math.abs(side3*side3 + side2*side2 - side1*side1) < 0.2)
        return true;
    else
        return false;
Run Code Online (Sandbox Code Playgroud)

再次感谢您的帮助!

rua*_*akh 6

我看到了一些问题:

  • 选中这两个一个2 + b 2 = c ^ 2b 2 + 一个2 = c ^ 2,但这些实际上相当于
  • 你永远不会检查是否一个2 + c ^ 2 = b 2.
  • 你用来Math.pow对数字进行平方,这既低效又不精确.(你应该使用*.)
  • 你期望浮点运算给出一个确切的值 - 适合==- 它通常不会.