0
votes

The class contains:

  • Three double data fields named side1, side2, and side3 with default values 1.0 to denote three sides of the triangle

  • A no-arg constructor that creates a triangle with specified side1, side2,and side3.

  • The accessor methods for all three data fields.

  • A method named getArea() that returns the area if this triangle.

  • A method named getPerimeter() that returns the perimeter of this triangle.

*A method named toString() that returns a string description for the triangle.

For the formula to compute the area of a triangle, see ProgrammingExercise 2.15( in An introduction to java programming 9th edition) The toString() method is implemented as follows:

return " Triangle: side1 = " + side1 + " side2 = " + side2 + " side3 " + side3;

Draw the UML diagrams for the classes Triangle and GeometricObject and implement the classes. Write a test program that prompts the user to enter three sides of the triangle, a color, and a boolean value to indicate wheter the triangle is filled. The program should create a triangle object with these sides and set the color and filled properties using the input. The program should display the area, perimeter, color and true or false to indicate wheter it is filled or not.


The part of the exercise that i am having trouble with is the test program.

If you could help me out by giving me pointers about how i can make the Triangle from the input i would be very grateful.

The code i have at the moment is this :

The GeometricObject

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 ";                 
    }   
 }

The Triangle program

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;
    }
}

The Testprogram.

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?);

    }
}
2
new Triangle(side1, side2, side3)? - BartoszKP
Ok, thank you very much for the fast reply. I added the code you suggested, now i'm closer to my goal! - Khilmarsen

2 Answers

1
votes

You need to create a new Triangle object like this, so that you have a reference

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.    

You also need to set it's filled and color properties

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

Then, you can invoke its methods like this:

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());

You're able to access the GeometricObject's isFilled(), setFilled(), getColor(), and setColor() because a Triangle is a GeometricObject (extends), so it inherits all its methods.

By the way, this is not how to calculate the area of a triangle:

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

Check out this link for correct formula

Edit: With another problem with code

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;
}

Edit: Triangle Formula

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

GeometricObject

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
 */

}

Triangle

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());
}
}