TurtleTest.java Answers

Click here to go back to the questions
// ANSWERS:
//
// (1) Finish the method carry()
// 

public void carry(Turtle onTop) {
   up = onTop;
}

// 
// (2) Finish the method tellStory()
// 

public void tellStory() {
    System.out.println("Turtle " + name +
                       " is carrying the following turtles: ");
    // for-loop goes here:
    for (Turtle tempTurtle = up;
         tempTurtle != null; tempTurtle = tempTurtle.up) {
       System.out.println(tempTurtle.name + " ");
    }
}
// 
// (3) Write a method findTopTurtle() that returns a reference to the
// Turtle at the top of the pile.
// 

public Turtle findTopTurtle() {
   Turtle tempTurtle = this;
   while (tempTurtle.up != null) {
      tempTurtle = tempTurtle.up;
   }
   return tempTurtle;
}

// 
// (4) Write a method isAtTop() which returns whether or not the
// current Turtle is at the top of the pile.
// 

public boolean isAtTop() {
   if (up == null) {
      return true;
   }
   else {
      return false;
   }
}

// 
// (5) Write the method calculateLoad() that returns the total weight of
// all the Turtles sitting on the current one.
// 

public int calculateLoad() {
   int load = 0;
   for (Turtle tempTurtle = up;
        tempTurtle != null;
        tempTurtle = tempTurtle.up) {
      load = load + tempTurtle.weight;
   }
   return load;
}

// 
// (6) Write the method findOldestTurtle() that returns a
// reference to the oldest Turtle in the pile, starting from
// the current one.
// 

public Turtle findOldestTurtle() {
   Turtle oldestTurtle = this;
   for (Turtle tempTurtle = up;
        tempTurtle != null;
        tempTurtle = tempTurtle.up) {
      if (tempTurtle.age > oldestTurtle.age) {
         oldestTurtle = tempTurtle;
      }
   }
   return oldestTurtle;
}

// 
// (7) What is the advantage in having the fields name, age and weight
// private?
// 

// So the other classes cannot read from or write to these fields.

// 
// (8) How could we have it so that other classes could read the name, age,
// and weight of the Turtles, but not be allowed to change the name, age
// and weights?
// 

// By introducing three new methods: getName(), getAge() and getWeight()
// defined as follows:
public String getName() {
   return name;
}
public int getAge() {
   return age;
}
public int getWeight() {
   return weight;
}

// If you are in another class then you can read the name, age and weight
// by calling these methods.  Note that other classes still cannot
// alter the three properties name, age and weight so the properties
// are said to be "read-only" from other classes.

// 
// (9) What is the advantage in having the property "up" private?
// 

// So that other classes cannot adjust the order of the turtles in
// the pile.  If other classes need to scan through the lists, it
// might be necessary to add a "getUp()" method like for the
// previous question.

// 
// (10) Write a method called insert(Turtle aTurtle) that inserts
// aTurtle after the current Turtle in the list.
// 

public void insert(Turtle aTurtle) {
   aTurtle.up = up;
   up = aTurtle;
}

// 
// (11) HARDER: Rewrite the tellStory method using recursion.  Note that
// you will need two functions instead of one.
// 

// NOTE: There is more than one way to solve this question.

public void tellStory() {
   System.out.println("Turtle " + name +
                      " is carrying the following turtles: ");
   if (up != null) {
      tellStoryWorker(up);
   }
}
// NOTE: The method tellStoryWorker could be declared as
// static.  If you don't understand why this is true, then
// ignore this remark because the method works as it
// stands without being static.
private void tellStoryWorker(Turtle current) {
   System.out.println(current.name + " ");
   if (current.up != null) {
      tellStoryWorker(current.up);
   }
}

//