如何处理读取三角形三面的作业程序,如果输入有效则计算区域?

时间:2015-03-09 23:07:47

标签: 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. */ 
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作为该地区的答案。我做错了什么?

4 个答案:

答案 0 :(得分:2)

所以你写下面的内容: 如果输入有效,则显示错误消息。否则(否则)计算区域。 你应该交换你的if和else部分!如果您使用有效三角形的点调用它,您的程序永远不会调用area()方法。 而且,你永远不会调用isValid()方法。您为变量赋值true,然后在下一行中检查它,但实际检查它的方法从未被调用过。

您还需要isValid()的副变量,但只能在area()方法中计算它们。你应该在获得积分后立即计算它们。

答案 1 :(得分:2)

您只是声明一个名为“isValid”的变量并将其设置为true。在检查输入是否有效之前,您需要计算边长。然后通过调用

调用isValid 函数

isValid(side1, side2, side3);

答案 2 :(得分:2)

当您调用区域方法时(根据@mashaned的回答您没有调用)

area(side1, side2, side3);

您使用仅初始化但未设置的变量调用它。 调用区域时,side1,side2和side3没有值。

您应该为副变量创建一个类,以便您可以传递x和y值,如下所示:

area(new Side(x1, y1), new Side(x2, y2), new Side(x3, y3));

或者

您应该更改区域方法以接受x1, y1, x2, y2, x3, y3而不是侧面,因为您正在计算区域方法中的边:

public static double area(double x1, double y1, double x2, double y2, double x3, double y3) {

此外,调用它时,您没有对区域方法返回的区域执行任何操作。 我建议像:

System.out.println("Area " + String.valueOf([INSERT VERSION OF AREA METHOD CALL OF YOUR CHOICE]));

关于isValid变量的第一个答案也是正确的。您没有使用isValid()方法进行验证。

你应该以与传入的内容类似的方式使用它。

示例类(大致完成)可能如下所示:

public class Side(){
        double x = 0;
        double y = 0;

        public Side(double x, double y){
            this.x = x;
            this.y = y;
        }

        public double getX(){
            return this.x;
        }

        public double getY(){
            return this.y;
        }

        public void setX(double x){
            this.x = x;
        }

        public void setY(double y){
            this.y = y;
        }
    }

您可能需要考虑添加此方法并从区域方法中删除类似的代码:

public void computeSides(double x1, double y1, double x2, double y2, double x3, double y3){
        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);
    }

然后当你去调用isValid()或area()时,你只需要先确认你调用computeSides(),然后边变量将有值,两者都应该有效。

答案 3 :(得分:-1)

编写一个方法computeArea,它取三角形的三个边并返回该三角形的面积(假设这些边是有效的)编写一个main方法来读取两个三角形的边,计算它们的面积(使用computeArea方法) ,并打印面积较大的三角形的边。运行:

输入三角形的边:4 6 9

输入三角形的边:3 9 8

面积最大的三角形有以下边:

side1:3.0,side2:9.0,side3:8.0