Title: Fraction
Course: CPS 161: An Intro to Programming with Java - DL MM MASTER

Fraction Problem

Create a class called Fraction. Provide a constructor that takes 2 integers. Provide methods for

- toString
- setFraction
- equals
- add
- subtract
- multiple
- divide
- reduce - make sure you get the previous methods done before worrying about reduce.

The following will be your starting point:



package fractions;

import java.util.*;

public class Fraction
{
    private Scanner scan = new Scanner(System.in);
    private int num=1;
    private int denom=1;

    public Fraction()
    {
    }

    public Fraction(int n, int d)
    {
        // Fill in code (good to use setFraction)
    }

    public void setFraction(int n, int d)
    {
       //Fill in code ... don't forget to reduce
    }

    public Fraction add(Fraction op)
    {
        //Fill in code ... don't forget to reduce
        // Algebra HINT:  a/b + c/d = (a*d + b*c)/(b*d)
    }

    public Fraction subtract(Fraction op)
    {
        //Fill in code ... don't forget to reduce
        // Algebra HINT:  a/b - c/d = (a*d - b*c)/(b*d)
     }

    public Fraction multiply(Fraction op)
    {
        //Fill in code ... don't forget to reduce
        // Algebra HINT:  a/b * c/d = (a*c)/ (b*d)
     }

    public Fraction divide(Fraction op)
    {
        //Fill in code ... don't forget to reduce
        // Algebra HINT:  a/b  /  c/d = (a*d)/ (b*c)
     }


     private void reduce()
     {
     // Pseudo code:
     // set smaller = minimum ( abs(num), abs(denom));
     // Loop through the possible divisors: 2, 3, 4, ... smaller
     // For each possible divisor:
     //      while (num and denom are evenly divisible by divisor)
     //      {
     //           num /= divisor;
     //           denom /= divisor;
     //           smaller /= divisor;
     //      }
     }

     public boolean equals(Fraction f)
     {
        // Assuming all fractions are reduced
        // Fill in code
     }

     public String toString()
     {
        // Fill in code
     }

     public void readin(String label)
     {
        while (true) // Keep trying if bad input is received
        {
            System.out.print(label);
            String temp = scan.next();
            temp = temp.trim(); // get rid of white space at the beginning and end
            int index = temp.indexOf('/');
            if (index >= 0)
            {
                String numStr = temp.substring(0, index);
                String denomStr = temp.substring(index+1);
                int n = Integer.parseInt(numStr);
                int d = Integer.parseInt(denomStr);
                setFraction(n,d);
                return;
            }
            else
                System.out.println("Input Fraction missing / ");
        }//Keep trying until you get it right
     }

     public static void main(String[] args)
     {
        Fraction f1= new Fraction();
        Fraction f2= new Fraction();
        Fraction f3=null;
        Scanner scan = new Scanner(System.in);

        while(true)
        {
            System.out.println();  // Add a blank line
            System.out.print("Enter operation: + - * / q (q ==> quit) : ");
            String input = scan.next();
            if (input.charAt(0) == 'q')
                break; // All done

            f1.readin("Enter Fraction 1: ");
            f2.readin("Enter Fraction 2: ");
            System.out.println("f1 = " + f1);
            System.out.println("f2 = " + f2);

            if (f1.equals(f2))
                System.out.println("f1 and f2 are equal");
            else
                System.out.println("f1 and f2 are not equal");

            switch (input.charAt(0))
            {
            case '+':
                f3 = f1.add(f2);
                System.out.println("f1+f2=" + f3);
            break;

            case '-':
                f3 = f1.subtract(f2);

                System.out.println("f1-f2=" + f3);
                break;

            case '*':
                f3 = f1.multiply(f2);
                System.out.println("f1*f2="+f3);
                break;

            case '/':
                f3 = f1.divide(f2);
                System.out.println("f1/f2="+f3);
                break;

            default:
                System.out.println("Illegal command: "  + input );
                break;

            }
        }// end of while loop
        System.out.println("Bye");

     }  // end of main
 }

Please try to run the following Fraction calculations:

(note the answers are filled with ______)



Enter operation: + - * / q (q ==> quit) : +
Enter Fraction 1: 1/3
Enter Fraction 2: 4/6
f1 = 1/3
f2 = 2/3
f1 and f2 are not equal
f1+f2=_________

Enter operation: + - * / q (q ==> quit) : +
Enter Fraction 1: 5/25
Enter Fraction 2: 10/50
f1 = 1/5
f2 = 1/5
f1 and f2 are equal
f1+f2=_________

Enter operation: + - * / q (q ==> quit) : +
Enter Fraction 1: 7/30
Enter Fraction 2: 11/20
f1 = 7/30
f2 = 11/20
f1 and f2 are not equal
f1+f2=_________

Enter operation: + - * / q (q ==> quit) : -
Enter Fraction 1: 11/12
Enter Fraction 2: 4/5
f1 = 11/12
f2 = 4/5
f1 and f2 are not equal
f1-f2=_________

Enter operation: + - * / q (q ==> quit) : *
Enter Fraction 1: 5/6
Enter Fraction 2: 1/4
f1 = 5/6
f2 = 1/4
f1 and f2 are not equal
f1*f2=_________

Enter operation: + - * / q (q ==> quit) : /
Enter Fraction 1: 6/7
Enter Fraction 2: 1/12
f1 = 6/7
f2 = 1/12
f1 and f2 are not equal
f1/f2=_________

Enter operation: + - * / q (q ==> quit) : q
Bye