Espresso: A Concentrated Introduction to Java

# Laboratory: Designing Your Own Classes

Summary: In this laboratory, you will extend your knowledge of numeric values in Java.

Primary Classes Used:

Source Files:

Contents

## Exercises

### Exercise 0: Preparation

In this lab, you will continue to use the Code project.

a. Create a new package for this lab, called `username.fractions`. Note that you should use your own username in place of username.

b. Make copies of Fraction.java and TestFraction.java.

c. Update those files to use your package.

d. Compile and run them to verify that they work.

### Exercise 1: Multiplication

a. Extend the `Fraction` class so that it permits multiplication of two fractions.

### Exercise 2: Fractional Portions

As you may know, we can represent every non-negative rational number as a whole number plus a fractional value no smaller than 0 and strictly less than 1.

a. Write a method of the `Fraction` class, `fractional`, that identifies and returns this fractional value as a `Fraction`. Your procedure need only work for positive numbers.

For example,

```Fraction f = new Fraction(11,3);
pen.println(f.fractional());
// Prints 2/3
f = new Fraction(1,2);
pen.println(f.fractional());
// Prints 1/2
f = new Fraction(4,2);
pen.println(f.fractional());
// Prints 0/2 or something similar
```

### Exercise 3: From String to Fraction

Write and test a third constructor for the `Fraction` class. This constructor should accept a string as a parameter, parse that string, and generate the appropriate fraction. For example,

```Fraction f = new Fraction("1/4");
pen.println(f.doubleValue());
// Prints 0.25
f = new Fraction("120/3");
pen.println(f.doubleValue());
// Prints 40.0
```

You can expect that the string will have two positive integers separated by a slash. You may find it useful to reflect on the `indexOf` method of the `java.lang.String` class and on various methods of the `java.lang.Integer` class.

### Exercise 4: A Simple Calculator

Write a main class that reads in two fractions and prints out their sum and product in both fractional and decimal form.

### Exercise 5: A Counter Class

Write and test a class, `Counter`, that generates objects that can count. Objects in class `Counter` should provide two methods: `increment`, which adds 1 to the counter, and `get`, which gets the current value of the counter.

Make sure to verify that if you create two separate objects in class `Counter`, you can change the two objects separately.

### Exercise 6: Extending Counters

a. Update your `Counter` class to include a second constructor that Allows the user to specify a starting value.

b. Update your `Counter` class to include a `reset` method that reset the counter to the starting value.

## For Those With Extra Time

### Extra 1: Further Extending Counters

Identify other methods that would be useful to include in the `Counter` class and add them.

### Extra 2: Further Extending Fractions

Identify other methods that would be useful to include in the `Fraction` class and add them.

## History

Friday, 11 February 2005 [Samuel A. Rebelsky]

• Created

Wednesday, 22 February 2006 [Samuel A. Rebelsky]

• Minor edits.

This page was generated by Siteweaver on Thu Mar 30 15:24:35 2006.
The source to the page was last modified on Wed Feb 22 08:35:58 2006.
This page may be found at `http://www.cs.grinnell.edu/~rebelsky/Espresso/Labs/classes.html`.

You may wish to validate this page's HTML ; ; Check with Bobby

Samuel A. Rebelsky
rebelsky@grinnell.edu