Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Else If语句输出不正确_Java_Netbeans 8 - Fatal编程技术网

Java Else If语句输出不正确

Java Else If语句输出不正确,java,netbeans-8,Java,Netbeans 8,我正在开发一个程序,将三角形分成不同的类别(等边、不等边、右等),三角形的给定点。我已经完成了99%,但还有一个if语句不起作用 对于最终的测试运行,我们应该输入点(0,0)(0,5)(5,0),然后得到输出“等边,右”。然而,我的代码似乎跳过了该语句,直接进入下一个if语句,该语句将三角形分类为scalene 提前谢谢。我是一个新手,所以它可能是一个相对简单的东西,可以避开我的眼睛 下面是全部代码 public class TriangleCalculator { @Suppress

我正在开发一个程序,将三角形分成不同的类别(等边、不等边、右等),三角形的给定点。我已经完成了99%,但还有一个if语句不起作用

对于最终的测试运行,我们应该输入点(0,0)(0,5)(5,0),然后得到输出“等边,右”。然而,我的代码似乎跳过了该语句,直接进入下一个if语句,该语句将三角形分类为scalene

提前谢谢。我是一个新手,所以它可能是一个相对简单的东西,可以避开我的眼睛

下面是全部代码

public class TriangleCalculator {

    @SuppressWarnings("empty-statement")
    public static void main(String[] args) 
    {
      System.out.println("Enter the x- and y- coordinates of the first point");
      Scanner keyBoard = new Scanner (System.in);
        double coordOneX = keyBoard.nextDouble();
        double coordOneY = keyBoard.nextDouble();
      System.out.println("Enter the x- and y- coordinates of the second point");
        double coordTwoX = keyBoard.nextDouble();
        double coordTwoY = keyBoard.nextDouble();
      System.out.println("Enter the x- and y- coordinates of the third point");
        double coordThreeX = keyBoard.nextDouble();
        double coordThreeY = keyBoard.nextDouble(); 

        if((coordOneY - coordTwoY) * (coordTwoX - coordThreeX) == (coordTwoY - coordThreeY) * (coordOneX - coordTwoX))
        {
           System.out.printf ("D1 ={(%.3f,%.3f) , D2 = (%.3f,%.3f) , D3 = (%.3f,%.3f) are colinear and cannot be vertices of a triangle.}%n",
                coordOneX, coordOneY, coordTwoX, coordTwoY, coordThreeX, coordThreeY);
        }
        else if((coordOneY - coordTwoY) * (coordTwoX - coordThreeX) != (coordTwoY - coordThreeY) * (coordOneX - coordTwoX))
        {    
            System.out.printf ("Triangle ={(%.3f,%.3f) , (%.3f,%.3f) , (%.3f,%.3f) }%n",
                coordOneX, coordOneY, coordTwoX, coordTwoY, coordThreeX, coordThreeY);

            double distanceOne = Math.sqrt(Math.pow(coordOneX - coordTwoX,2) + Math.pow(coordOneY - coordTwoY,2));
                System.out.printf("Distance (P1,P2) = %.3f%n", distanceOne);
            double distanceTwo = Math.sqrt(Math.pow(coordTwoX - coordThreeX,2) + Math.pow(coordTwoY - coordThreeY,2));
                System.out.printf("Distance (P2,P3)= %.3f%n", distanceTwo);
            double distanceThree = Math.sqrt(Math.pow(coordOneX - coordThreeX,2) + Math.pow(coordOneY - coordThreeY,2));
                System.out.printf("Distance (P1,P3)= %.3f%n", distanceThree);   

            double perimeter = distanceOne + distanceTwo + distanceThree;
                System.out.printf("Perimeter = %.3f %n", perimeter);

            double s = perimeter / 2;
                double area = Math.sqrt(s * (s - distanceOne) * (s - distanceTwo) *(s - distanceThree));
                System.out.printf("Area = %.3f %n", area);

            double side1 = distanceOne;
            double side2 = distanceTwo;
            double side3 = distanceThree;               
            String classification = ("");

            if(side1 == side2)
                classification = "isosceles";
            else if(side2==side3)
                    classification = "equilateral";
            else if (Math.abs(side1*side1 + side2*side2 - side3*side3) < 1E-9)
                classification = "isoceles, right";
            if(side1 == side3||side2 == side3)
                 classification = "isosceles";
            else classification = "scalene";
            if(side1*side1 + side2*side2 == side3*side3)
                classification = "scalene, right";


        System.out.println("Clasification(s): " +classification);
公共类三角形计算器{
@SuppressWarnings(“空语句”)
公共静态void main(字符串[]args)
{
System.out.println(“输入第一个点的x和y坐标”);
扫描仪键盘=新扫描仪(System.in);
double coordOneX=keyBoard.nextDouble();
double coordOneY=keyBoard.nextDouble();
System.out.println(“输入第二个点的x和y坐标”);
double coordTwoX=keyBoard.nextDouble();
double coordTwoY=keyBoard.nextDouble();
System.out.println(“输入第三点的x和y坐标”);
double coordThreeX=键盘.nextDouble();
double coordThreeY=键盘.nextDouble();
如果((coordOneY-coordTwoY)*(coordTwoX-coordTwoX)==(coordTwoY-coordTwoY)*(coordOneX-coordTwoX))
{
System.out.printf(“D1={(%.3f,%.3f),D2=(%.3f,%.3f),D3=(%.3f,%.3f)是共线的,不能是三角形的顶点。}%n”,
coordOneX,coordOneY,coordTwoX,coordTwoY,coordTwoX,coordTwoY);
}
else如果((coordOneY-coordTwoY)*(coordTwoX-coordTwoX)!=(coordTwoY-coordTwoY)*(coordOneX-coordTwoX))
{    
System.out.printf(“三角形={(%.3f,%.3f),(.3f,%.3f),(.3f,%.3f)}%n”,
coordOneX,coordOneY,coordTwoX,coordTwoY,coordTwoX,coordTwoY);
双距离1=Math.sqrt(Math.pow(coordOneX-coordTwoX,2)+Math.pow(coordOneY-coordTwoY,2));
系统输出打印F(“距离(P1,P2)=%.3f%n”,距离1);
双距离2=Math.sqrt(Math.pow(coordTwoX-coordThreeX,2)+Math.pow(coordTwoY-coordThreeY,2));
系统输出打印F(“距离(P2,P3)=%.3f%n”,距离2);
双距离三=Math.sqrt(Math.pow(coordOneX-coordThreeX,2)+Math.pow(coordOneY-coordThreeY,2));
系统输出打印F(“距离(P1,P3)=%.3f%n”,距离三);
双周长=距离一+距离二+距离三;
System.out.printf(“周长=%.3f%n”,周长);
双s=周长/2;
双面积=数学sqrt(s*(s-距离一)*(s-距离二)*(s-距离三));
System.out.printf(“面积=%.3f%n”,面积);
双侧1=距离1;
双侧2=距离2;
双面3=距离3;
字符串分类=(“”);
if(side1==side2)
分类=“等腰”;
else if(side2==side3)
分类=“等边”;
否则如果(数学绝对值(边1*边1+边2*边2-边3*边3)<1E-9)
classification=“isoceles,右”;
if(side1==side3 | | side2==side3)
分类=“等腰”;
else-classification=“scalene”;
if(side1*side1+side2*side2==side3*side3)
classification=“不等边,右”;
System.out.println(“分类:”+分类);
这是有关代码的特定部分:

        if(side1 == side2)
            classification = "isosceles";
        else if(side2==side3)
                classification = "equilateral";
        else if (Math.abs(side1*side1 + side2*side2 - side3*side3) < 1E-9)
            classification = "isoceles, right";
        if(side1 == side3||side2 == side3)
             classification = "isosceles";
        else classification = "scalene";
        if(side1*side1 + side2*side2 == side3*side3)
            classification = "scalene, right";
if(side1==side2)
分类=“等腰”;
else if(side2==side3)
分类=“等边”;
否则如果(数学绝对值(边1*边1+边2*边2-边3*边3)<1E-9)
classification=“isoceles,右”;
if(side1==side3 | | side2==side3)
分类=“等腰”;
else-classification=“scalene”;
if(side1*side1+side2*side2==side3*side3)
classification=“不等边,右”;

由于双精度浮点数和浮点数都是浮点数,因此不应将双精度浮点数与
=
进行比较,这是因为您无法100%确定或保证分配给浮点数或双精度浮点数的数字正是内存中映射的数字

在您的情况下,请改为使用
Double。比较
并查看此项

例子
根据文件: :

根据IEEE 754标准规范确定的浮点比较结果为:

浮点相等性测试根据IEEE 754标准的规则执行:

  • 如果任一操作数为NaN,则==的结果为false,而!=的结果为true。实际上,当且仅当x的值为NaN时,测试x!=x为true。还可以使用Float.isNaN和Double.isNaN方法测试值是否为NaN

  • 正零和负零被认为是相等的。例如,-0.0==0.0为真

  • 否则,相等运算符会将两个不同的浮点值视为不相等。特别是,有一个值表示正无穷大,另一个值表示负无穷大;每个值仅与自身相等,而每个值与所有其他值不相等


这不会有什么帮助。
Double.compare()
只需将参数解压到
Double
中,并使用
=
。它添加的主要功能是支持
NaN
。就个人而言,我会比较角度和侧面,但您的代码从不输出

// compares the two specified double values
double d1 = 15.45;
double d2 = 11.50;
int retval = Double.compare(d1, d2);