Java 编写类:创建一个与给定测试人员一起工作的RightTriangle类

Java 编写类:创建一个与给定测试人员一起工作的RightTriangle类,java,Java,我正在做作业,现在有点迷路了。作业要求我创建一个与给定驱动程序一起工作的RightTriangle类。详情如下: 您的RightTriangle类将需要两个构造函数: 一种参数化构造函数,取三角形的两条边并计算斜边。如果任一分支小于或等于零,则引发异常 默认构造函数,将两个支腿设置为1并计算斜边。此构造函数应使用“This”命令调用参数化构造函数 您的RightTriangle类将需要以下公共方法: 返回双精度值的getArea()方法 返回双精度 一个toString方法(),它返回以下

我正在做作业,现在有点迷路了。作业要求我创建一个与给定驱动程序一起工作的RightTriangle类。详情如下:

您的RightTriangle类将需要两个构造函数:

  • 一种参数化构造函数,取三角形的两条边并计算斜边。如果任一分支小于或等于零,则引发异常
  • 默认构造函数,将两个支腿设置为1并计算斜边。此构造函数应使用“This”命令调用参数化构造函数
您的RightTriangle类将需要以下公共方法:

  • 返回双精度值的getArea()方法
  • 返回双精度
  • 一个toString方法(),它返回以下格式的字符串:“边为1.0、1.0和斜边为1.4142135623730951的直角三角形。”

RightTriangleDriver.java

import java.util.*;

public class RightTriangleDriver
{
    public static void main(String[] args)
    {
        /*
            Menu:
                1 - test default constructor and toString
                2 - test parameterized constructor and toString
                3 - test getArea
                4 - test getPerimeter
        */

        Scanner kb = new Scanner(System.in);
        int option = kb.nextInt();

        switch(option)
        {
            case 1:  //1 - test default constructor and toString
                try
                {
                    System.out.println("Testing default constructor, then toString()");
                    RightTriangle r = new RightTriangle();
                    System.out.println("Got: " + r);
                }
                catch(Throwable ex)
                {
                    System.out.println("\tgot:      " + ex);
                }
                break;

            case 2:  //2 - test parameterized constructor and toString
                try
                {
                    System.out.println("Testing parameterized constructor, then toString()");
                    double side1 = kb.nextDouble();
                    double side2 = kb.nextDouble();
                    RightTriangle r = new RightTriangle(side1, side2);
                    System.out.println("Got: " + r);
                }
                catch(Throwable ex)
                {
                    System.out.println("Got: " + ex);
                }
                break;

            case 3:  //3 - test getArea
                try
                {
                    System.out.println("Testing getArea()");
                    double side1 = kb.nextDouble();
                    double side2 = kb.nextDouble();
                    RightTriangle r = new RightTriangle(side1, side2);
                    System.out.println("Got: " + r.getArea());
                }
                catch(Throwable ex)
                {
                    System.out.println("Got: " + ex);
                }
                break;

            case 4:  //4 - test getPerimeter
                try
                {
                    System.out.println("Testing getPerimeter()");
                    double side1 = kb.nextDouble();
                    double side2 = kb.nextDouble();
                    RightTriangle r = new RightTriangle(side1, side2);
                    System.out.println("Got: " + r.getPerimeter());
                }
                catch(Throwable ex)
                {
                    System.out.println("Got: " + ex);
                }
                break;

            default:
                System.out.println("I don't understand your request");
        }
    }
}
这就是我到目前为止得到的

 public class RightTriangle
{

    private double side1;
    private double side2;


    //constructors
    public RightTriangle()
    {
        this(1.0, 1.0);
    }

    public RightTriangle(double s1, double s2)
    {
        if(s1 > 0 && s2 > 0)
            side1 = s1;
            side2 = s2;
        else
            throw new IllegalArgumentException("All triangle edges must have positive length");
    }


    //Methods

    public String toString()
    {
        return  "A right triangle with edges " + side1 + ", " + side2 + " , and hypotenuse " + Math.sqrt((side1 * side1) + (side2 * side2)) + ".";
    }


    //get Area
    public double getArea()
    {
        return side1 * side2 / 2;
    }


    //get Perimeter
    public double getPerimeter()
    {
        return side1 + side2 + Math.sqrt((side1 * side1) + (side2 * side2));
    }

    //get hypotenuse
    public double getHypotenuse()
    {
        return Math.sqrt((side1 * side1) + (side2 * side2));
    }
  • 我被卡住了,因为我不知道如何让它们在所有的测试中工作。任何建议都将不胜感激
我可能遗漏了一些内容,但似乎您只需要根据作业中的规范覆盖RightTriangle的toString

如果你愿意,我可以详细说明。如果我有这样的名声,我会把这篇文章作为评论发表

编辑:

RightTriangle r = new RightTriangle();
System.out.println("Got: " + r);
此代码来自RightTriangleDriver。当
p
时,一个直角三角形对象被赋予System.out.println,它的
toString()
值被打印出来

因此,它与以下内容相同:

RightTriangle r = new RightTriangle();
System.out.println("Got: " + r.toString());
根据作业中的规范:

您的RightTriangle类将需要以下公共方法:

一个toString方法(),它返回以下格式的字符串:“边为1.0、1.0和斜边为1.4142135623730951的直角三角形。”

编辑2:toString的更详细描述

toString
适用于java中的每个对象。默认情况下,您自己的类“
toString
方法将返回如下内容”RightTriangle@l13e8ed".

在该赋值的规范中,您的任务是使toString()返回对象的特定描述,而不是默认描述。我们通过重写
toString
方法来实现这一点

当您想要重写一个方法时,您可以创建一个新的方法,其声明(返回类型、名称和参数类型)与超类中的声明相同。还有更高级的规则,但一般来说,您只需创建具有相同声明的方法。在这种情况下,在
RightTriangle
中创建
公共字符串toString()
将覆盖默认存在的toString():

public String toString(){
    return "A right triangle with edges " + firstSide + ", " + secondSide +", and hypotenuse " + hypotenuse + ".";
}

非常感谢。我有什么办法可以联系你吗?这是本着堆栈溢出的精神,试图澄清一个问题,并回答这个问题,在网站本身。这使得这个问题及其答案能够帮助未来的读者——如果私下提供帮助,那么在大多数情况下,任何一方都不会回来告诉我们解决方案是什么。@halfer我知道,但Xyexs提到他没有这样做的声誉(如果我没弄错的话)。@Apple我输了1分。我将编辑答案。@Xyexs您能详细说明一下吗?如何覆盖它?