University of Toronto - Fall 2000
Department of Computer Science

Week 5 - Name class

Version 2

// Describe objects that have a first and last name, and an optional
// middle name.
class Name {
	private String first;		// First name
	private String middle;		// Middle name, or null if none
	private String last;		// Last name

	// Make me with first name f, last name l, and no middle name.
	public Name (String f, String l) {
		this.first = f;
		this.last = l;
	}

	// Make me with first name f, middle name m, and last name l.
	public Name (String f, String m, String l) {
		this.first = f;
		this.middle = m;
		this.last = l;
	}

	// Return my first, middle, last names as a String.
	public String toString() {
		String result = this.first;
		if (this.middle != null) {
			result = result + " " + this.middle;
		}
		result = result + " " + this.last;
		return result;
	}

	// Return true if my names are the same as
	// n's, false otherwise.
	public boolean equals (Name n) {
		return this.first.equals (n.first) &&
				this.last.equals(n.last) &&
				equals(this.middle, n.middle);
	}

	// Return true if both s1 and s2 are null, or if
	// s1 and s2 have the same contents.
	private static boolean equals (String s1, String s2) {
	   return (s1 == null && s2 == null) ||
		   (s1 != null && s2 != null && s1.equals(s2));
	}

	// Test two names for equality.  If they're
	// different, print an error message.
	public static void testSame (Name n1, Name n2) {
		if  (! n1.equals(n2) ) {
			System.out.println ("Test failure: " + n1 +
 					" " + n2 + " " + n1.equals(n2));
		}
	}

	// Test two names for equality.  If they're
	// the same, print an error message.
	public static void testDiff (Name n1, Name n2) {
		if  ( n1.equals(n2) ) {
			System.out.println ("Test failure: " + n1 +
 					" " + n2 + " " + n1.equals(n2));
		}
	}

	// Test names with/without a middle name.
	public static void test () {
		// Test same names, no middle.
		testSame( new Name("A","B"), new Name("A","B") );

		// Test different names, no middle.
		testDiff( new Name("A","B"), new Name("A","C") );
		testDiff( new Name("A","B"), new Name("C","B") );
		testDiff( new Name("A","B"), new Name("B","A") );

		// Test same names, with middle.
		testSame( new Name("A","B","C"), new Name("A","B","C") );

		// Test different names, no middle.
		testDiff( new Name("A","B","C"), new Name("D","B","C") );
		testDiff( new Name("A","B","C"), new Name("A","D","C") );
		testDiff( new Name("A","B","C"), new Name("A","B","D") );

		// Test different names, first with no middle.
		testDiff( new Name("A","C"), new Name("A","B","C") );

		// Test different names, second with no middle.
		testDiff( new Name("A","B","C"), new Name("A","C") );	
	}
}

Simple test class to run the test method, which tests our Name class. This could have been included in the Name class instead.

public class RunTest {
        public static void main (String[] args) {
                Name.test();
        }
}

Output:

No output.