See below.
// Tree.java // public class Tree { // instance variables private double x, y, z; private Cone branches; private Cylinder trunk; // constructor public Tree( double trRad, double trHeight, double brRad, double brHeight, double x, double y, double z) { trunk = new Cylinder( trHeight, trRad ); branches = new Cone( brHeight, brRad ); this.x = x; this.y = y; this.z = z; } // methods public String toString() { double totalHeight = branches.getHeight() + trunk.getHeight(); double width = branches.getRadius(); return "Tree. Height: " + totalHeight + ", width: " + width + ", area: " + area() + ", volume: " + volume() ; } // more methods public double volume() { // return the sum of two volumes return trunk.volume() + branches.volume(); } public double area() { // return the sum of two areas // minus twice the area of the trunk's circular top double total = trunk.area() + branches.area(); double rad = trunk.getRadius(); double circle = Math.PI*rad*rad; return total - 2*circle; } public void grow( double rate ) { // increase all dimensions by rate double bHeight = branches.getHeight(); branches.setHeight( bHeight*(1.0+rate) ); double bRadius = branches.getRadius(); branches.setRadius( bRadius*(1.0+rate) ); double tHeight = trunk.getHeight(); trunk.setHeight( tHeight*(1.0+rate) ); double tRadius = trunk.getRadius(); trunk.setRadius( tRadius*(1.0+rate) ); } }
It might be good to test things:
public class TreeTester { public static void main( String[] args ) { double trunkR = 1.0, trunkH = 1.0, branchR = 11.0, branchH = 10.0 ; Tree myTree = new Tree( trunkR, trunkH, branchR, branchH, 1, 2, 3 ); System.out.println("myTree: " + myTree + "\n"); myTree.grow( 0.10 ); System.out.println("bigger Tree: " + myTree); } }
Should Tree
objects have setter and getter methods?