## Monday, 16 January 2017

### Chapter 20 Exercise 4, Introduction to Java Programming, Tenth Edition Y. Daniel LiangY.

20.4 (Sort points in a plane)
Write a program that meets the following requirements:
■ Define a class named Point with two data fields x and y to represent a point’s x- and y-coordinates.
Implement the Comparable interface for com- paring the points on x-coordinates. If two points have the
same x-coordinates, compare their y-coordinates.
■ Define a class named CompareY that implements Comparator<Point>. Implement the compare method to
compare two points on their y-coordinates. If two points have the same y-coordinates, compare their x-coordinates.
■ Randomly create 100 points and apply the Arrays.sort method to display the points in increasing
order of their x-coordinates and in increasing order of their y-coordinates, respectively.

import java.util.Arrays;
import java.util.Comparator;
public class Exercise_04 {

public static void main(String[] args) {

// Create 100 random points
Point[] points = new Point[100];
for (int i = 0; i < points.length; i++) {
points[i] = new Point();
points[i].x = Math.random() * 100;
points[i].y = Math.random() * 100;
}

points[0].x = 1.03;
points[0].y = 1.04;
points[1].x = 1.03;
points[1].y = 1.03;

// Sort by X priority
Arrays.sort(points);
for (Point p : points) {
System.out.println(p.toString());
}

// Sort by Y priority
Arrays.sort(points, new CompareY());
for (Point p : points) {
System.out.println(p.toString());
}

}
}
class Point implements Comparable<Point> {

public double x;
public double y;

@Override
public int compareTo(Point o) {

if (x > o.x)
return 1;
else if (x < o.x)
return -1;
else if (y > o.y)
return 1;
else if (y < o.y)
return -1;
else
return 0;
}

@Override
public String toString() {
return "[" + String.format("%.2f",x) + ", " + String.format("%.2f",y) + "]";
}
}

class CompareY implements Comparator<Point> {

@Override
public int compare(Point o1, Point o2) {

if (o1.y > o2.y)
return 1;
else if (o1.y < o2.y)
return -1;
else if (o1.x > o2.x)
return 1;
else if (o1.x < o2.x)
return -1;
else
return 0;
}
}