## Description

Problem 1 [15pts]. Create a class Employee that includes the following instance variables

• First name (String) cannot be empty,

• Last name (String) cannot be empty,

• Monthly salary (double) must be non-negative.

Provide a set and a get method for each instance variable. The setters must return boolean

and perform validation. If the monthly salary is not positive, set its value to zero. If a name is

empty set it to “[empty]”. Provide a constructor that initializes the three instance variables.

No default constructor is required. Also, overwrite equals() and toString(). Write a

test class named EmployeeTest that demonstrates class Employee’s capabilities. Create two

different Employee objects. Use println() to display information about each employee (this

will invoke toString()). Then compare the two using equals() and display the result.

Submission format: You must define two classes. One is Employee which must be declared

as a non-public class. Two is EmployeeTest which is public and contains the main()

method. So, you must submit one file EmployeeTest.java containing the above two classes.

The tests must be performed in the main() method.

1

Problem 2 [35pts]. Define a class for rational numbers. A rational number is a number

that can be represented as the quotient of two integers. For example, 1

2

,

3

4

,

64

2

, and so forth

are all rational numbers. Represent rational numbers as two values of type int, one for the

numerator and one for the denominator. Your class should have two instance variables of

type int. Call the class Rational.

Include a constructor with two arguments that can be used to set the instance variables

of an object to any values. Also include a constructor that has only a single parameter of

type int; call this single parameter whole and define the constructor so that the object will

be initialized to the rational number whole

1

. Also include a no-argument constructor that

initializes an object to 0 (that is, to 0

0

).∗

Define methods Add addition, Sub subtraction, Mul multiplication, and Div division of objects

of your class Rational. These methods should use a calling object and a single argument.

For example, the Add method has a calling object and one argument. So a.Add(b) returns

the result of adding the rationals a and b.

You should include a method, Normalize(), to normalize the sign of the rational number

so that the denominator is positive and the numerator is either positive or negative. For

example, after normalization, 4

−8 would be represented the same as −4

8

; similarly, −1

−2 would

be represented the same as 1

2

.

Importantly, define accessor and mutator methods. Also provide methods equals and

toString. These two methods must first perform normalization.

Extra points [10pts]: Normalize() performs full normalization. For example 4

−8

is reduced to −1

2

. You need to find the GCD (Greatest Common Divisor) of the numerator and

the denominator and divide both by it. Use Euclid’s recursive algorithm. We recommend

that you use a private helper method to do the job.

Submission format: A file RationalTest.java which contains the non-public Rational

class and a public test class RationalTest containing a main() method which instantiates

and tests Rationals. Your tests should include the following corner cases†

• Operations involving zero,

• Operations involving positive and negative numbers,

• Various normalization possibilities.

We will, of course, test your code with our own tests too.

∗Here 0

0

is not the undefined division-by-zero operation. It is used to represent zero.

†The statements regarding tests are a bit vague because identifying the corner cases is a skill that you

should develop. In programming interviews, you are usually asked to write tests for you code.

2