Class 17: Interfaces


What we did
We didn't do much with interfaces today, so please look closely at Dr. Crabbe's notes on the subject. What we did do is look at how we could use the sorting function Arrays.sort(Object[] a) by implementing the Comparable interface. The following code was our program demonstrating this.

import java.util.*;
import java.lang.*;
public class TestIt
{
  public static void main(String[] args)
  {
    // Create an array of random Game objects
    Random r = new Random();
    GameObject[] A = new GameObject[10];
    for(int i = 0; i < 10; ++i)
      A[i] = new GameObject(r.nextInt(5),
			    r.nextInt(5),
			    r.nextInt(3), 
			    (char)('a' + i));

    // Print out array
    for(int i = 0; i < 10; ++i)
      System.out.println(A[i]);
    System.out.println();

    Arrays.sort(A);

    // Print out array
    for(int i = 0; i < 10; ++i)
      System.out.println(A[i]);
    System.out.println();
  }
}
import java.util.*;
public class GameObject extends Pos implements Comparable
{
  private char sym;
  public GameObject(int row, int col, int dir, char s)
  {
    super(row,col,dir);
    sym = s;
  }
  public char getSym() { return sym; }
  public void write(char[][] board) 
  { 
    board[getRow()][getCol()] = sym; 
  }  
  public String toString() {
    return "(" + getRow() + "," + getCol() + "," + 
           getDir() + "," +  getSym() + ")";
  }
  public int compareTo(Object o) 
  {
    GameObject a = (GameObject)o;
    if (getRow() < a.getRow()) return -1;
    if (getRow() > a.getRow()) return  1;
    if (getCol() < a.getCol()) return -1;
    if (getCol() > a.getCol()) return  1;
    if (getDir() < a.getDir()) return -1;
    if (getDir() > a.getDir()) return  1;
    if (getSym() < a.getSym()) return -1;
    if (getSym() > a.getSym()) return  1;
    else return 0;
  }
}
/**
This class represents a row-col position with
a N/E/S/W direction.  N=0,E=1,S=2,E=3.
@author Dr. Brown
 */
public class Pos {

    private int r, c, d;

    public Pos(int row, int col, int dir) {
        r = row;
        c = col;
        d = dir;
    }

    public void moveForward() {
        int[] dr = {-1, 0, 1, 0};
        int[] dc = {0, 1, 0, -1};
        r += dr[d];
        c += dc[d];
    }

    public void turnRight() {
        d = (d + 1) % 4;
    }

    public void turnLeft() {
        d = (d + 3) % 4;
    }

    public int getRow() {
        return r;
    }

    public int getCol() {
        return c;
    }

    public int getDir() {
        return d;
    }
    @Override
    public String toString() {
        return "(" + r + "," + c + "," + d + ")";
    }

    public static void main(String[] args) {
        Pos p = new Pos(4, 7, 1);
        System.out.println(p);
        p.moveForward();
        System.out.println(p);
    }
}


Christopher W Brown
Last modified: Wed Aug 19 11:00:04 EDT 2009