Задание
Создайте класс для выполнения основных операций с дробями. В данном варианте дроби не должны изменяться после создания, а методы, реализующие арифметические операции должны быть статическими. Реализуйте метод для автоматического получения строкового представления дроби при печати. Протестируйте своё решение в методе main().
Желательно реализовать метод сокращения дробей через алгоритм Евклида для поиска наибольшего общего делителя (НОД, GCD). Вполне уместной было бы реализовать в этом классе интерфейс Comparable и продемонстрировать работу метода java.util.Arrays.sort().
Решение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
class Fraction { final int numerator, denominator; static String delimiter = "/"; private int gcd(int a, int b){ while(b != 0){ int c = a % b; a = b; b = c; } return a; } public static Fraction addition(Fraction x, Fraction y) { Fraction z = new Fraction(x.numerator * y.denominator + y.numerator * x.denominator, x.denominator * y.denominator); return z; } public static Fraction substraction(Fraction x, Fraction y){ Fraction z = new Fraction(x.numerator * y.denominator - y.numerator * x.denominator, x.denominator * y.denominator); return z; } public static Fraction multiplication(Fraction x, Fraction y){ Fraction z = new Fraction(x.numerator * y.numerator, x.denominator * y.denominator); return z; } public static Fraction division (Fraction x, Fraction y){ Fraction z = new Fraction(x.numerator * y.denominator, x.denominator * y.numerator); return z; } public String toString(){ return numerator + delimiter + denominator; } public Fraction(){// name ofthe constructor starts from upper case numerator = 1; denominator = 2; } public Fraction(int d){ numerator = 1; denominator = d; } public Fraction(int n, int d){ int devider = gcd(n, d); numerator = n / devider; denominator = d / devider; } public Fraction(Fraction x){ numerator = x.numerator; denominator = x.denominator; } public static void main (String[] args) { System.out.println(new Fraction(2147483647, 2147483645)); Fraction x = new Fraction(5); System.out.println(x); Fraction y = x; System.out.println(y); Fraction z = new Fraction(x); //copy of x System.out.println(z); System.out.println(Fraction.addition(x, z)); System.out.println(Fraction.substraction(z, x)); System.out.println(Fraction.multiplication(x, z)); System.out.println(Fraction.division(x, z)); } } } |