Main Content

Long, Longer, Longest in Java

Archive - Originally posted on "The Horse's Mouth" - 2008-11-25 01:00:15 - Graham Ellis

If you want to find out how long a Film3 is, in the class that I use on our private Java Programming courses, you can call the getminutes method. That's standard OO stuff. But what if you want to find out which is the longer of two Film3s or the longest of a whole array of them?

Don't re-write code!!!. So your longer method should call getminutes, and your longest method should call either longer or getminutes directly. Here's an example:

public int getminutes() {
   return minutes;
   }
public Film3 longer(Film3 that) {
   int m1 = this.getminutes();
   int m2 = that.getminutes();
   if (m1 < m2) return that;
   return this;
   }
public static Film3 longest(Film3 [] ofthese) {
   Film3 sofar = ofthese[0];
   for (int owabout=1; owabout<ofthese.length; owabout++) {
   sofar = sofar.longer(ofthese[owabout]);
   }
   return sofar;
   }


longer is a method that runs on one object, with another passed in as a parameter:
  current = Library[1].longer(Library[2]);

By contrast, longest is a class or static method that runs on a whole array of objects:
  current = Film3.longest(Library);


You might wonder if longest could simply have run on the class as a whole and returned the largest defined Film3, but that would not be a good solution as you're likely to want to find (say) the longest horror film or the longest one for children, which will all be defined at the same time.

Links - Sample Program and the class that goes with it