import java.util.Arrays; import java.util.Scanner; public class CoordinatePolari implements Coordinate, Comparable{ public double rho; public double theta; public CoordinatePolari(double rho, double theta){ this.rho = rho; this.theta = theta; } public double distOrigine() { return rho; } @Override public String toString() { return "<"+ rho +", "+ theta + ">"; //return "<"+ String.format("%,.2f",rho)+", "+ String.format("%,.2f",theta) + ">"; } /** * Confronta le informazioni rilevanti per l'oggetto di invocazione con * l'oggetto passato come parametro. * Ritorna true se tali informazioni sono uguali, false altrimenti * * @param obj l'oggetto con cui voglio verificare l'uguaglianza dell'oggetto di invocazione * @retrun true se obj e' di tipo CoordinatePolari e se le informazioni rilevanti per * obj e per l'oggetto di invocazione sono uguali. * */ public boolean equals(Object obj) { if (obj instanceof CoordinatePolari) { CoordinatePolari cp = (CoordinatePolari) obj; return ((rho == cp.rho) && (theta == cp.theta)); } return false; } /** * Confronta l'oggetto di invocazione con l'oggetto passato come parametro. * Ritorna un intero negativo/positivo/nullo se l'oggetto di invocazione e' * minore/maggiore/uguale di o *

* Un oggetto CoordinatePolari cp1 e': * minore di cp2 se cp1.distOrigine() < cp2.distOrigine() * maggiore di cp2 se cp1.distOrigine() > cp2.distOrigine() * uguale se cp1.distOrigine()==cp2.distOrigine(). * * @param o l'oggetto con cui voglio confrontare l'oggetto di invocazione * @retrun un intero negativo/positivo/nullo se l'oggetto di invocazione e' * minore/maggiore/uguale di o * */ public int compareTo(Object obj) throws IllegalArgumentException{ if (obj instanceof Coordinate){ Coordinate cp = (Coordinate) obj; if (distOrigine() == cp.distOrigine()){ return 0; } return (distOrigine() > cp.distOrigine()?1:-1); //return (distOrigine()- cp.distOrigine()) } else { throw new IllegalArgumentException("tipo non comparabile"); } } public static void main(String[] args) { final int n = 10; CoordinatePolari cp1 = new CoordinatePolari(10.,0.); CoordinatePolari cp2 = new CoordinatePolari(10.,0.); CoordinatePolari cp3 = new CoordinatePolari(10.,30.); System.out.println(cp1 + " uguale " + cp2 + " : " + cp1.equals(cp2)); System.out.println(cp1 + " uguale " + cp3 + " : " + cp1.equals(cp3)); CoordinatePolari[] v = new CoordinatePolari[n]; for (int i = 0; i < v.length; i++) { v[i] = new CoordinatePolari(Math.random(),Math.random()); } System.out.println("Vettore non ordinato " + Arrays.toString(v)); Sort.mergeSort(v); System.out.println("Vettore ordinato " + Arrays.toString(v)); } }