
/**
 * Person class, ordered by salary.
 */
class Person implements Comparable
{
    Person( String n, int a, int s )
    {
        name = n; age = a; salary = s;
    }
    
    public String toString( )
    {
        return name + " " + age + " " + salary;
    }
    
    public int compareTo( Object other )
    {
        return salary - ((Person)other).salary;
    }
    
    String name;
    int age;
    int salary;
}

class FindMaxDemo
{
    /**
     * Return max item in a.
     * Precondition: a.length > 0
     */
    public static Comparable findMax( Comparable [] a )
    {
        int maxIndex = 0;
        
        for( int i = 1; i < a.length; i++ )
            if( a[ i ].compareTo( a[ maxIndex ] ) > 0 )
                maxIndex = i;
            
        return a[ maxIndex ];    
    }
    
    /**
     * Test findMax on Person, String, and Integer objects.
     */
    public static void main( String [] args )
    {
        Person [] p1 = { new Person( "Joe", 20, 40000 ),
                        new Person( "Bob", 25, 30000 ),
                        new Person( "Bill", 22, 50000 ) };
        
        String [] s1 = { "Joe", "Bob", "Bill", "Zeke" };
        
        Integer [] i1 = { new Integer( 34 ), new Integer( 56 ), new Integer( 17 ) };
        
        System.out.println( findMax( i1 ) );
        System.out.println( findMax( p1 ) );
        System.out.println( findMax( s1 ) );
    }
}

