In: Computer Science
3.2. Unfortunately, you cannot modify the Rectangle class so that it implements the Comparable interface. The Rectangle class is part of the standard library, and you cannot modify library classes.
Fortunately, there is a second sort method that you can use to sort a list of objects of any class, even if the class doesn't implement the Comparable interface.
Comparator<T> comp = . . .;
// for example, Comparator<Rectangle> comp = new RectangleComparator();
Collections.sort(list, comp);
Comparator is an interface. Therefore, comp must be constructed as an object of some class that implements the Comparator interface.
What method(s) must that class implement? (: Look up the Comparator interface in the API documentation.)
Your answer :
Implement a Rectangle comparator
3.3. Implement a class RectangleComparator whose compare method compares two rectangles.
The method should return:
a positive integer if the area of the first rectangle is larger than the area of the second rectangle
a negative integer if the area of the first rectangle is smaller than the area of the second rectangle
0 if the two rectangles have the same area
Part of the code has been provided for you below:
import java.util.Comparator;
import java.awt.Rectangle;
public class RectangleComparator implements Comparator<Rectangle>
{
/**
Compares two Rectangle objects.
@param r1 the first rectangle
@param r2 the second rectangle
@return 1 if the area of the first rectangle is larger than the area of
the second rectangle, -1 if the area of the first rectangle is
smaller than the area of the second rectangle or 0 if the two
rectangles have the same area
*/
public int compare(Rectangle r1, Rectangle r2)
{
. . .
}
}
Your answer :
Testing the rectangle comparator
3.4. Write a test program that adds the three rectangles below to a list, constructs a rectangle comparator, sorts the list, and prints the sorted list and the expected values.
Rectangle rect1 = new Rectangle(5, 10, 20, 30);
Rectangle rect2 = new Rectangle(10, 20, 30, 15);
Rectangle rect3 = new Rectangle(20, 30, 45, 10);
What is your test program?
Your answer :
Thanks for the question, Here are the 2 parts. ========================================================================= import java.util.Comparator; import java.awt.Rectangle; public class RectangleComparator implements Comparator<Rectangle> { public int compare(Rectangle o1, Rectangle o2) { if (o1.getWidth() * o1.getHeight() - o2.getWidth() * o2.getHeight() > 0) return 1; else if (o1.getWidth() * o1.getHeight() - o2.getWidth() * o2.getHeight() < 0) return -1; else return 0; } }
=============================================================
public class TestProgram { public static void main(String[] args) { Rectangle rect1 = new Rectangle(5, 10, 20, 30); Rectangle rect2 = new Rectangle(10, 20, 30, 15); Rectangle rect3 = new Rectangle(20, 30, 45, 10); Rectangle[] rectangles = new Rectangle[3]; rectangles[0] = rect1; rectangles[1] = rect2; rectangles[2] = rect3; System.out.println("Before Sorting: "); for (Rectangle r : rectangles) System.out.println(r + ", [Area: " + r.getHeight() * r.getWidth() + "]"); Arrays.sort(rectangles, new RectangleComparator()); System.out.println("After Sorting: "); for (Rectangle r : rectangles) System.out.println(r + ", [Area: " + r.getHeight() * r.getWidth() + "]"); } }
=============================================================