Java 如何处理一个家庭作业程序,该程序读取三角形的三条边,并在输入有效的情况下计算面积?(2)

Java 如何处理一个家庭作业程序,该程序读取三角形的三条边,并在输入有效的情况下计算面积?(2),java,netbeans,Java,Netbeans,这是对以下问题的重新提问: 任务又来了: 创建一个名为MyTriangle的类,该类包含以下两个方法: /** Return true if the sum of any two sides is * greater than the third side. */ public static boolean isValid (double side1, double side2, double side3) /** Return the area of the triangle. */ pu

这是对以下问题的重新提问:

任务又来了:

创建一个名为MyTriangle的类,该类包含以下两个方法:

/** Return true if the sum of any two sides is * greater than the third side. */
public static boolean isValid (double side1, double side2, double side3)

/** Return the area of the triangle. */ 
public static double area (double side1, double side2, double side3)
编写一个测试程序,读取三角形的三条边,如果输入有效,则计算面积。否则,将显示输入无效

以下尝试:问题:我无法理解这一点,不断重读这一章并没有突破任何障碍。问题的注释如下:

import java.util.Scanner;

public class NewClass1 {   

double area;
double side1, side2, side3;
double x1, x2, x3, y1, y2, y3;

public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.print("Enter two integers for side 1:");
        double x1 = input.nextDouble();
        double y1 = input.nextDouble();

        System.out.print("Enter two integers for side 2:");
        double x2 = input.nextDouble();
        double y2 = input.nextDouble();

        System.out.print("Enter two integers for side 3:");
        double x3 = input.nextDouble();
        double y3 = input.nextDouble();

        boolean isValid = true;

            if (isValid) {
                System.out.println("Input is invalid");
            }
                else
                    area(side1, side2, side3); //Using area does not work and I don't know how to remedy this. I've read the chapter over and over... I cannot get it to work.

    }

    public static double area(double side1, double side2, double side3) {
        double x1 = 0;
        double x2 = 0;
        double y1 = 0;
        double y2 = 0;
        double x3 = 0;
        double y3 = 0; 

            side1 = Math.pow(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2), 0.5);
            side2 = Math.pow(Math.pow(x3 - x1, 2) + Math.pow(y3 - y1, 2), 0.5);
            side3 = Math.pow(Math.pow(x3 - x2, 2) + Math.pow(y3 - y2, 2), 0.5);

            //Calculates the sides/angles using Heron's formula
            double s = (side1 + side2 + side3)/2;
            double area = Math.pow(s * (s - side1) * (s - side2) * (s - side3), 0.5);

            return (area);
    } 

    public static boolean isValid(double side1, double side2, double side3) {

        return (((side1 + side2) > side3) && ((side1 + side3) > side2) && ((side2 + side3) > side1));
    }
}
回顾代码,有人能解释一下我做错了什么,并解释一下可能的补救方法吗。一切都在那里,我简直无法把这些点连起来。多谢各位

修订代码

import java.util.Scanner;

public class NewClass1 {   

    public static void main(String[] args) {

            Scanner input = new Scanner(System.in);

            System.out.print("Enter side 1: ");
            double side1 = input.nextDouble();

            System.out.print("Enter side 2: ");
            double side2 = input.nextDouble();

            System.out.print("Enter side 3: ");
            double side3 = input.nextDouble();

            double a = area(side1, side2, side3);
            boolean isV = isValid(side1, side2, side3);

                    if (isV)
                        System.out.println("Inout is Invalid");
                    else
                        System.out.println("Area is: " + a);
        }

    public static boolean isValid(double side1, double side2, double side3) {

         return (((side1 + side2) > side3) && ((side1 + side3) > side2) && ((side2 + side3) > side1));
    }

    public static double area(double side1, double side2, double side3) {

                //Calculates the sides/angles using Heron's formula
        double s = (side1 + side2 + side3)/2;
        double theArea = Math.pow(s * (s - side1) * (s - side2) * (s - side3), 0.5);

            return (theArea);
    } 
}
我一直得到
NaN
作为该地区的答案。我做错了什么


我已经做了7个多小时了,只是因为我不理解可能存在的问题。我已经上了2个月的CompSci课程。

如果三角形有效,而您假设相反,则您的方法
有效
返回true:

double a = area(side1, side2, side3);
boolean isV = isValid(side1, side2, side3);
if (isV)
    System.out.println("Inout is Invalid");
您在
11.1
22.2
33.3
方面的输入数据(在注释中)进一步支持了这一点。这不是三角形,而是一系列重叠的线段

如果您键入完全有效的
3/4/5
三角形,您将得到一个错误,指出它不是三角形

因此,只需将上面的代码更改为(对无效数据调用
area
没有意义):

作出这些改变:

package test2;
import java.util.Scanner;

public class test2 {   
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter three sides, separated by spaces: ");
        double s1 = input.nextDouble();
        double s2 = input.nextDouble();
        double s3 = input.nextDouble();
        if (isValid(s1, s2, s3))
            System.out.println("Area is: " + area(s1, s2, s3));
        else
            System.out.println("Input is Invalid");
    }

    public static boolean isValid(double s1, double s2, double s3) {
         return ((s1 + s2 > s3) && (s1 + s3 > s2) && (s2 + s3 > s1));
    }

    public static double area(double s1, double s2, double s3) {
        double s = (s1 + s2 + s3) / 2;
        double theArea = Math.pow(s * (s - s1) * (s - s2) * (s - s3), 0.5);
        return theArea;
    } 
}
输入一个有效的三角形,如
3/4/5
5/5/8
,可以得到正确的结果:

Enter three sides, separated by spaces: 3 4 5
Area is: 6.0

Enter three sides, separated by spaces: 5 5 8
Area is: 12.0

if(isV)
应该是
if(!isV)
。如果条件不正确,则您只执行Heron公式,其中包含可能导致
s*(s-side1)*(s-side2)*(s-side3)
为负值的潜在危险输入。Java基元类型未定义取负数的平方根。

使用此项。。Heron公式

double sidesSvalue = (a + b + c)/2.0d;
double productofSides = (sidesSvalue  * (sidesSvalue -a) * (sidesSvalue -b) * (sidesSvalue -c));
double Area= Math.sqrt(productofSides );
return Area;

当您的值无效时,它们将进入该区域。请更正您的条件代码。您应该使用类似以下内容

if(!isValid)
   print error message
else 
   calculate area

最后一件事是在使用DMAS操作时总是尝试使用相同的基元类型。

NaN是因为
(s*(s-side1)*(s-side2)*(s-side3)
是负数(当Java尝试取负数的平方根时,它抛出NaN)。您修改后的代码对我有效,除了一件事:
if(isV)
应该是
if(!isV)
。你输入的是什么类型的数字?什么输入给了你NaN…如果你得到NaN,你不应该至少告诉我们你以前得到它的是什么吗?给我们看看你的输入样本。我试着`双a=面积(11.1,22.2,33.3);布尔isV=isValid(11.1,22.2,33.3);`硬编码输入。我得到的输出是8,@Chris Redfieldany number(s)任何长度,带/不带小数点。
代表“不相等”,是吗?我正试图在头脑中解决这个问题。如果不相等,如果不相等,我不会
计算面积并
否则
报告错误吗?没关系。我问这个问题时完全忽略了这个等式。谢谢你审阅我的代码!!!!!谢谢感谢您的输入。非常感谢。
!isValid
我现在明白了。DMAS操作?我想我在这一章还不足以了解它们是什么。对不起。DMAS(除法、乘法、加法、减法)。:)啊。我不熟悉缩写词。我以为这是Java世界中的一个特殊主题。
if(!isValid)
   print error message
else 
   calculate area