Algorithms and OOD (CSC 207 2013F) : Labs

# Laboratory: Designing Your Own Classes

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

Primary Classes Used:

GitHub Repository: `https://github.com/Grinnell-CSC207/lab-classes`.

## Exercises

### Preparation

Fork and clone the repository.

Read through the code to make sure that you understand what it does.

### 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. Here are some tests that illustrate what it's supposed to do.

```public static void testFractional() {
Fraction f = new Fraction(11,3);
assertEquals("2/3", f.fractional().toString());

f = new Fraction(1,2);
assertEquals("1/2",  f.fractional().toString());

f = new Fraction(4,2);
assertEquals("0", f.fractional().toString());
} // testFractional()
```

b. Test your procedure and correct any errors.

### 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,

```public static void stringConstructorTest() {
Fraction f = new Fraction("1/4");
assertEquals(1, f.numerator());
assertEquals(4, f.denominator());
f = new Fraction("11/5");
assertEquals(11, f.numerator());
assertEquals(4, f.denominator());
f = new Fraction("120/3");
assertEquals(40.0, f.toReal(), 0.0001);
} // stringConstructorTest()
```

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 static methods of the `java.lang.Integer` class.

### Exercise 4: 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 5: Enhancing 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.

c. Test both updates to ensure that they work as appropriate.

## For Those With Extra Time

### Extra 1: Further Enhancing Counters

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

### Extra 2: Further Enhancing Fractions

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

Copyright (c) 2013 Samuel A. Rebelsky.

This work is licensed under a Creative Commons Attribution 3.0 Unported License. To view a copy of this license, visit `http://creativecommons.org/licenses/by/3.0/` or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.