为什么我的if-JAVA语句总是得到错误的输出

为什么我的if-JAVA语句总是得到错误的输出,java,if-statement,Java,If Statement,我正在测试三角形的边,看看三角形是等边三角形还是等腰三角形,但即使所有的值都相等,我仍然会得到else输出。 有问题的代码在底部,我只是把其余的代码放在这里作为参考 public static void main(String[] args) { System.out.println(" Triangle Calculator \n"); Scanner inputab = new Scanner(System.in); System.out.println("

我正在测试三角形的边,看看三角形是等边三角形还是等腰三角形,但即使所有的值都相等,我仍然会得到else输出。 有问题的代码在底部,我只是把其余的代码放在这里作为参考

public static void main(String[] args) 
{
    System.out.println("  Triangle Calculator  \n");

    Scanner inputab = new Scanner(System.in);

    System.out.println("Input lenghts of sides 'a' and 'b':");
    double sideA = inputab.nextDouble();
    double sideB = inputab.nextDouble();

    System.out.println("Input the size of Angle C in degrees:");
    double angleC = inputab.nextDouble();
    inputab.close();

    double sideC = Math.sqrt((Math.pow(sideA, 2) + 
    Math.pow(sideB, 2)- 2*(sideA*sideB)*Math.cos(Math.toRadians(angleC))));     

    System.out.println("\n\t   /\\\n\t  /  \\\n\t /    \\\n\t/      \\");
    System.out.printf("   %3.1f",sideA);
    System.out.print("/        \\");
    System.out.printf("%3.1f",sideB);
    System.out.println("\n      /          \\\n     /            \\\n    /______________\\");
    System.out.printf("\t  %3.1f\n", sideC);

    double angleA = Math.asin(sideA*Math.sin(Math.toRadians(angleC))/sideC);

    angleA = Math.toDegrees(angleA);

    double angleB = 180 - angleC - angleA;

    double perimeter = sideA + sideB + sideC;

    double hf = 0.5 * (sideA + sideB + sideC);
    double area = Math.sqrt(hf*(hf-sideA)*(hf-sideB)*(hf-sideC));

    System.out.printf("\nSide a       = ");
    System.out.printf("%4.3f",sideA);
    System.out.printf("\nSide b       = ");
    System.out.printf("%4.3f", sideB);
    System.out.printf("\nSide c       = ");
    System.out.printf("%4.3f", sideC);
    System.out.printf("\nAngle A(Deg) = "); 
    System.out.printf("%5.3f", angleA  );
    System.out.printf("\nAngle B(Deg) = ");
    System.out.printf("%5.3f", angleB);
    System.out.printf("\nAngle C(Deg) = ");
    System.out.printf("%5.3f", angleC);
    System.out.printf("\nPerimeter    = ");
    System.out.printf("%5.3f", perimeter);
    System.out.printf("\nArea         = ");
    System.out.printf("%5.3f", area);


    if (sideA == sideB && sideA == sideC)
    {
        System.out.println("\nThis is an Equilateral Triangle");
    }
    else
    {
        System.out.println("\nThis is not an Equilateral Triangle");
    }

    if ((sideA == sideB && sideB!= sideC ) 
       ||(sideA != sideB && sideC == sideA) 
       || (sideC == sideB && sideC != sideA))
    {
        System.out.println("\nThis is an Isosceles Triangle");
    }
    else 
    {
        System.out.println("\nThis is not an Isosceles Triangle");
    }

波蒂是对的。我在调试器模式下运行eclipse以查看程序执行时的值。我用5表示A和B边的值,用60表示C边的值。结果是A和B等于5.0,而C侧等于4.9999。。。
有多种方法可以解决这个问题,但你似乎很有能力,尤其是现在你知道了问题所在

在执行浮点运算时测试精确相等性可能是主要问题。与其测试是否相等,不如检查两个值之间差值的绝对值是否小于某个阈值。如果要获得准确值,请使用
bigdecime
而不是double,因为例如,如果输入4,4,60,sideC的计算结果将是3.99999999996(32-32.0000000000000 4)而不是4,如果需要任何超出我所说的帮助,请评论。