Класс изменяемых рациональных дробей

Задача

Напишите класс для работы с изменяемыми (mutable) рациональными дробями, подготовьте для него интерфейс.

Тесты

Входные данные: четыре целых числа — числитель и знаменатель дроби F1, числитель и знаменатель  дроби F2

Выходные данные: результаты сравнения, сложения, вычитания, умножения, деления дробей F1 и F2

Входные данные Дробь F1 Дробь F2 Сравнение F1 и F2 F1+F2 F1-F2 F1*F2 F1/F2
1 1 2 2 3 1/2 2/3 1/2<2/3 7/6 -1/6 1/3 3/4
2 4 16 3 -5 1/4 -3/5 1/4>-3/5 -7/20 17/20 -3/20 -5/12
3 1 7 2 14 1/7 1/7 1/7=1/7 2/7 0/1 1/49 1/1
4 2 4 0 4 1/2 0/1 1/2>0/1 1/2 1/2 0/1 Error

Код

Код доступен на ideone

Пояснение

Класс Arithmetics содержит метод для вычисления НОД  public static int gcd(int a, int b).

Класс  Fraction  предназначен для работы с изменяемыми дробями. Его методы предосталяют возможность выполнять такие действия с дробью:

  • получить значение числителя (метод public int getNumerator()) и знаменателя (метод public int getDenominator());
  • задать значение (методы  public void setValue() с различными параметрами) числителем и знаменателем (параметры  int n, int d, целым числом (параметр  int n) или другой дробью (параметр  Fraction f);
  • прибавить, отнять, умножить на, разделить на дробь или целое число (методы  public void  add(), substract(), multiply()divide() с параметрами  Fraction f или int n;
  • сравнить с другой дробью (методы  public boolean equals() и  public int compareTo();
  • получить строковое представление дроби (метод  public String toString().