// Arup Guha
// Originally written in 1999 Spring semester for CS302 at UW-Madison
// Edited on 3/6/07 for COP 3330 at UCF.

import java.util.Random;
import java.io.*;

public class Coordinate implements Comparable<Coordinate> {

    protected int num; // row of chart, these are protected for use in
                       // ColorCoordinate class.
    protected char c; // column of chart
    protected static Random r = new Random();
        
    // Sets instance variables to random values.
    public Coordinate() {
		num = 1 + Math.abs(r.nextInt()%10);
		c = (char)('a' + Math.abs(r.nextInt()%10)); 
    }
    
    // Sets instance variables to parameters passed into Constructor.
    public Coordinate(int n, char ch) {
		num = n;
		c = ch;
    }
    
    public int compareTo(Coordinate mycoordinate) {
    	if (num != mycoordinate.num)
    		return num-mycoordinate.num;
    	return c-mycoordinate.c;
    }

    // Accessor methods.
    public int getNum() {
		return num;
    }

    public char getC() {
		return c;
    }

    // Returns true if Coordinate c2 is equal to the Coordinate
    // the method is called on. 
    public boolean equals(Coordinate c2) {
    	System.out.println("Method #1");
		if (num == c2.num && c == c2.c)
	    	return true;
		else
	    	return false;
    }
    
    
    /*** NOTE: ADDING THIS METHOD CHANGES THE POLYMORPHIC BEHAVIOR
     *         OF THE equals method.						  ***/
     
    // Overloading method equals for the Coordinate class.
    public boolean equals(ColorCoordinate c2) {
    	System.out.println("Method #2");
    	return (num == c2.num && c == c2.c);
    }

    // Returns a String representation of the current object.
    public String toString() {
    	System.out.println("In coordinate toString()");
		return "Row = " + num + " Column = " + c;
    }

    // Returns a String representation of the current object.
    public void printCoordinate() {
		System.out.print("Row = " + num + " Column = " + c);
    }

}
