无与伦比的类型:布尔值和双精度

时间:2016-10-09 12:34:23

标签: java

import java.util.*;
public class quadrado {
    public static void main (String args[]) {
        int xp1,xp2,xp3,xp4,yp1,yp2,yp3,yp4;
        double c1,c2,c3;
        Scanner aa = new Scanner (System.in);
            System.out.print("Insira a abcissa do P1\n");
            xp1 = aa.nextInt();
            System.out.print("Insira a ordenada do P1\n");
            yp1 = aa.nextInt();

            System.out.print("Insira a abcissa do P2\n");
            xp2 = aa.nextInt();
            System.out.print("Insira a ordenada do P2\n");
            yp2 = aa.nextInt();

            System.out.print("Insira a abcissa do P3\n");
            xp3 = aa.nextInt();
            System.out.print("Insira a ordenada do P3\n");
            yp3 = aa.nextInt();

            System.out.print("Insira a abcissa do P4\n");
            xp4 = aa.nextInt();
            System.out.print("Insira a ordenada do P4\n");
            yp4 = aa.nextInt();

            c1= Math.sqrt((xp2-xp1)^2 + (yp2-yp1)^2);
            c2= Math.sqrt((xp3-xp2)^2 + (yp3-yp2)^2);
            c3= Math.sqrt((xp4-xp3)^2 + (yp4-yp3)^2);

            System.out.print("A figura é um quadrado: "+c1);

            if (c1==c2==c3) {                                           // sendo os lados consecutivos
                System.out.print("A figura é um quadrado"); }
            else {
                System.out.print("A figura não é um quadrado"); }


        }
    }   

我正在尝试写一些给定4点坐标的东西,决定它是否形成正方形。我决定得到3个矢量的长度,如果它们都是相同的大小,它说它是一个正方形。我是初学者,所以我真的需要帮助:/

5 个答案:

答案 0 :(得分:4)

if (c1==c2==c3)

让我们打破这个:

c1==c2

这可以是truefalse,我们可以调用此b1

b1 == c3

b1booleanc3仍是double - 错误

此外,== can cause problems with double。虽然它的使用在这里应该没问题,但在大多数地方,这都需要牢记。

答案 1 :(得分:2)

你不能写c1==c2==c3,因为这意味着(c1==c2)==c3所以如果c1 == c2你说true == c3没有意义。

很有可能你打算

if (c1 == c2 && c2 == c3)

注意:虽然double可能有代表错误,但在这种情况下,错误会保持一致,并且您不需要检查一个小的计算错误。

相反,如果你有通过不同方法计算的非整数,你需要允许一些错误(或使用四舍五入)

 double a = input();
 double b = input();
 double c = input();

 if (a == b && b == c) // ok
 if (a + b == c) // not ok, needs rounding or tolerance.

您还应该注意^表示按位异或,而不是幂。你可以改为

 double c1 = Math.sqrt(Math.pow(xp2-xp1, 2) + Math.pow(yp2-yp1, 2));

答案 2 :(得分:0)

比较双打时,您应该始终允许小容差,因为您通常会得到舍入错误:

static final double TOL = 1.0e-8;
if (Math.abs(c1-c2) < TOL && Math.abs(c1-c3) < TOL) ...

顺便说一下,检查所有边是否都有相同的长度是不够的,因为这也是钻石形状的情况。您还需要检查直角。

答案 3 :(得分:0)

如果c1 == c2&amp;&amp; c2 == c3而不是。

您的编译器抱怨,因为c1 == c2 == c3被评估为(c1 == c2)== c3并且这在java中是不允许的,因为c1 == c2是布尔类型。

请注意,由于浮点不精确,如果在取平方根之前比较相等性会更好,因为这些类型是整数。也就是说,在这种情况下它实际上并不重要,因为计算出的长度不会以任何方式组合。

答案 4 :(得分:0)

你无法比较两件以上的东西。 Java正在比较c1&amp; c2,那就是比较c1&amp;的结果。 c2与c3。 如果你想比较多个变量,你需要用更多的if语句进行比较。

-XX:MaxHeapFreeRatio

你也可以这样做:

if (c1 == c2 && c1 == c3 && c2 == c3) {...}