【问题标题】:(The Triangle class) Design a class named Triangle that extends GeometricObject(Triangle 类)设计一个扩展 GeometricObject 的名为 Triangle 的类
【发布时间】:2013-11-06 15:16:25
【问题描述】:

该类包含:

  • 三个 double 数据字段分别命名为 side1side2side3,具有默认值 1.0 表示三角形的三个边

  • 一个无参数构造函数,用于创建具有指定 side1side2side3 的三角形。

  • 所有三个数据字段的访问器方法。

  • 一个名为 getArea() 的方法,它返回这个三角形的面积。

  • 名为 getPerimeter() 的方法返回此三角形的周长。

*一个名为 toString() 的方法,它返回三角形的字符串描述。

关于计算三角形面积的公式,请参见 ProgrammingExercise 2.15(在 An Introduction to java Programming 9th edition 中) toString() 方法实现如下:

返回"三角形:side1 = " + side1 + " side2 = " + side2 + " side3 " + side3;

TriangleGeometricObject 类绘制 UML 图并实现这些类。编写一个测试程序,提示用户输入三角形的三个边、一种颜色和一个布尔值,以指示三角形是否被填充。程序应该创建一个具有这些边的 triangle 对象,并使用输入设置 colorfilled 属性。程序应显示面积、周长、颜色和真假以指示是否填充。


我遇到问题的部分是测试程序。

如果你能帮助我,指点我如何从输入中制作三角形,我将不胜感激。

我现在的代码是这样的:

几何对象

public class GeometricObject {
    private String color = " white ";
    private boolean filled;
    private java.util.Date dateCreated;

    public GeometricObject() {
        dateCreated = new java.util.Date();
    }

    public GeometricObject(String color, boolean filled) {
        dateCreated = new java.util.Date();
        this.color = color;
        this.filled = filled;   
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public boolean isFilled() {
        return filled;
    }

    public void setFilled(boolean filled) {
        this.filled = filled;
    }

    public java.util.Date getDateCreated() {
        return dateCreated;
    }

    public String toString() {
        return "Created on " + dateCreated + "\n color: " + color + " and filled ";                 
    }   
 }

三角计划

public class Triangle extends GeometricObject {
    private double side1 = 1.0;
    private double side2 = 1.0;
    private double side3 = 1.0;

    public Triangle() {
    }

    public Triangle(double side1, double side2, double side3) {
        this.side1 = side1;
        this.side2 = side2;
        this.side3 = side3;
    }

    public double setSide1() {
        return side1;
    }

    public double setSide2() {
        return side2;
    }

    public double setSide3() {
        return side3;
    }

    public void setSide1(double side1) {
        this.side1 = side1;
    }

    public void setSide2(double side2) {
        this.side2 = side2;
    }

    public void setSide3(double side3) {
        this.side3 = side2;
    }

    public double getArea() {
        return (side1 + side2 + side3) / 2;
    }

    public double getPerimeter() {
        return side1 + side2 + side3;
    }

    public String toString() {
    return " Triangle: Side 1 = " + side1 + " Side 2 = " + side2
           + " Side 3 = " + side3;
    }
}

测试程序。

import java.util.Scanner;

public class TestTriangle  {
    private double side1 = 1.0;
    private double side2 = 1.0;
    private double side3 = 1.0;

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

        System.out.println("Enter three sides of the Triangle");
        double side1 = input.nextDouble();
        double side2 = input.nextDouble();
        double side3 = input.nextDouble();

        System.out.println("Enter the color of the Triangle");
        String color = input.next();

        System.out.println(" Is the Triangle filled? Reply with 'True' or 'False' ");

        String filled = input.next(); 
    }
    {
        new Triangle(side1, side2, side3);
        //How do i get the information into theTriangle?

        System.out.println("The Triangle Sides are \n side 1: " + side1 + "\n Side 2: " + side2 + "\n Side 3: " + side3);
        System.out.println("The Triangle's Area is " + (side1 + side2 + side3) / 2);
        System.out.println("The Triangle's Perimeter is "
                           + (side1 + side2 + side3));
        System.out.println("The Triangle's Color is " + //what goes here?);
        System.out.println("Is the Triangle filled? " + //what goes here?);

    }
}

【问题讨论】:

  • new Triangle(side1, side2, side3)?
  • 好的,非常感谢您的快速回复。我添加了你建议的代码,现在我离我的目标更近了!

标签: java inheritance


【解决方案1】:

你需要像这样新建一个Triangle对象,这样你就有了引用

Trangle triangle = new Triangle(side1, side2, side3);

  //     ^^^^^^ This is the most important thing you're missing.  You need a reference
  //            point for your object.  That's the only way you can access it's
  //            properties.    

您还需要设置它的filledcolor 属性

triangle.setFilled(filled);
triangle.setColor(color);

然后,您可以像这样调用它的方法:

System.out.println("The Triangle Sides are \n side 1: " 
       + triangle.getSide1() + "\n Side 2: " + triangle.getSide2() 
       + "\n Side 3: " + triangle.getSide3());

System.out.println("The Triangle's Area is " + triangle.getArea());

System.out.println("The Triangle's Perimeter is " + triangle.getPerimeter();

System.out.println("The Triangle's Color is " + triangle.getColor());
System.out.println("Is the Triangle filled? " + triangle.isFilled());

您可以访问GeometricObjectisFilled()setFilled()getColor()setColor(),因为TriangleGeometricObject (extends),所以它继承它的所有方法。

顺便说一句,这不是计算三角形面积的方法:

public double getArea() {
    return (side1 + side2 + side3) / 2;   // This is so wrong
}

查看此link 以获得正确的公式

编辑:代码有另一个问题

public double setSide1() {
    return side1;
}

public double setSide2() {
    return side2;
}

public double setSide3() {
    return side3;
}

/**** Should Be ******/

public double getSide1() {
    return side1;
}

public double getSide2() {
    return side2;
}

public double getSide3() {
    return side3;
}

编辑:三角公式

public double getArea() {
    int p = getPerimeter() / 2
    return Math.sqrt(p * ((p - side1) * (p - side2) * (p - side3));
}

【讨论】:

  • 您好,感谢您的回答。颜色和填充都给了我错误。 Triangle triangle = new Triangle(side1, side2, side3); triangle.setFilled(filled); triangle.setColor(color); `System.out.println("三角形边是 \n 第 1 边:" + triangle.getSide1() + "\n 第 2 边:" + triangle.getSide2() + " 中的所有 triangle.getSide()) \n 第 3 面:" + triangle.getSide3())´
  • 另外,当我需要根据输入制作三角形时,我可以使用getColor()setColor()isFilled()setFilled() from GeometricObject 吗?
  • 好的,我现在得到的错误是 这些在这些行 System.out.println("The Triangle Sides are \n side 1: " + triangle.getSide1() + "\n Side 2: " + triangle.getSide2() + "\n Side 3: " + triangle.getSide3()); - getSide1() 方法未定义Triangle 类型 - 方法 getSide2() 未定义 Triangle 类型 方法 getSide3() 未定义 Triangle 类型
  • 啊哈!谢谢你。现在差不多了:)
  • 您的三角形类中有 SIX set 方法。其中三个应该是get 方法。那应该可以解决您的问题。请接受这个答案。
【解决方案2】:

几何对象

package geometricobject;
import java.util.Scanner;

/**
 *
 * @author Kirubel 
 */

abstract class GeometricObject
{

private String color = "white";
private boolean filled;
private java.util.Date dateCreated;
/** Construct a default geometric object */
protected GeometricObject()
{


}

/** Construct a geometric object with color and filled value */
protected GeometricObject(String color, boolean filled)
{
    dateCreated = new java.util.Date();
    this.color = color;
    this.filled = filled;
}

/** Return color */
public String getColor()
{
    return color;
}

/** Set a new color */
public void setColor(String color)
{
    this.color = color;
}

/** Return filled. Since filled is boolean ,
 * the get method is named isFilled */
public boolean isFilled()
{
    return filled;
}

/** Set a new filled */
public void setFilled(boolean filled)
{
    this.filled = filled;
}

/** Get dateCreated */
public java.util.Date getDateCreated()
{
    return dateCreated;
}

@Override
public String toString() {
    return "created on " + dateCreated + "\ncolor: " + color +
            " and filled: " + filled;
}

/** Abstract method getArea */
public abstract double getArea();

/** Abstract method getPerimeter */
public abstract double getPerimeter();

/**
 * @param args the command line arguments
 */

}

三角形

class Triangle extends GeometricObject
{

public double side1;
public double side2;
public double side3;
public Triangle() //default constructor
{
    side1=1.0;
    side2=1.0;
    side3=1.0;
}

public Triangle(double side1,double side2,double side3) //peremetrised constructor
{
    this.side1=side1;
    this.side2=side2;
    this.side3=side3;
}
@Override
public double getPerimeter() //function for getting peremeter for triangle
{
    return(side1+side2+side3) ;

}



@Override
// function for getting area of triangle
public double getArea() 
{
    double area,s;
    s=side1+side2+side3;
    area = Math.sqrt(s * (s- side1) * (s - side2) * (s - side3));
    return(area);

}
@Override
public String toString()//to print the data
{
    String s;
    s="Triangle:side1 "+ side1 +" side2 " + side2 + " side3 "+side3;
    return(s);
}

private String getSide1() {
    // TODO Auto-generated method stub
    return null;
}

private String getPerimeter(double d) {
    // TODO Auto-generated method stub
    return null;
}

private String getPerimeter(String string) {
    // TODO Auto-generated method stub
    return null;
}

private String getSide3() {
    // TODO Auto-generated method stub
    return null;
}

private String getSide2() {
    // TODO Auto-generated method stub
    return null;
}


public static void main(String args[])
{

    Scanner input = new Scanner(System.in);

    System.out.println("Enter three sides of the Triangle");
    double side1 = input.nextDouble();
    double side2 = input.nextDouble();
    double side3 = input.nextDouble();

    System.out.println("Enter the color of the Triangle");
    String color = input.next();

    System.out.println(" Is the Triangle filled? Reply with 'True' or 'False' ");

    String filled = input.next(); 
}


{
    Triangle triangle = new Triangle(side1, side2, side3);
    triangle.setFilled(isFilled());
    triangle.setColor(getColor());

    // Display 
    System.out.println("The Triangle Sides are \n side 1: " 
            + triangle.getSide1() + "\n Side 2: " + triangle.getSide2() 
            + "\n Side 3: " + triangle.getSide3());

    System.out.println("The Triangle's Area is " + triangle.getArea());
    System.out.println("The Triangle's Perimeter is " + triangle.getPerimeter());
    System.out.println("The Triangle's Color is " + triangle.getColor());
    System.out.println("Is the Triangle filled? " + triangle.isFilled());
}
}

【讨论】:

  • 从用户那里得到输入后,它不显示结果或答案。样品运行 #1:输入三角形的第 1 侧:13 输入三角形的第 2 侧:14 输入三角形的第 3 侧:15 输入三角形的颜色:红色 输入三角形是否填充(是/否):是 面积:84.0 周长:42.0颜色:红色 填充?:真 样品运行 #2:输入三角形的第 1 侧:9 输入三角形的第 2 侧:40 输入三角形的第 3 侧:41 输入三角形的颜色:橙色 输入三角形是否填充(是/否):没有 面积:180.0 周长:90.0 颜色:橙色 填充?:false
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-08
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
相关资源
最近更新 更多