Одинаковые экземпляры должны иметь одинаковую ссылку - PullRequest
0 голосов
/ 05 июня 2018

На данный момент у меня есть класс Fraction, который позволяет мне создавать дроби тремя различными способами

  • С одним целым числом, в данном случае данное целое число будет числителем, а знаменатель будет установленв 1
  • При 2 целых числах числитель и знаменатель
  • Последний метод заключается в разборе строки, которая должна соответствовать REGEX -? \ d + / [1-9] \ d*

Сгенерированные фракции будут максимально уменьшены с помощью gcd.

public class Fraction extends Number {

        public static final String REGEX = "-?\d+/[1-9]\d*";


        public static int gcd(int a, int b) {
          return b == 0 ? a : gcd(b, a % b);

        }


        public static Fraction parseFraction(String s) {
           if (!s.matches(REGEX)) {
              throw new RuntimeException("Parsing error");
           }
           String[] splitted = s.split("/");
           return new Fraction(Integer.parseInt(splitted[0]),
                   Integer.parseInt(splitted[1]));
        }

        private int numerator;

        private int denominator;


        public Fraction(int numerator) {
           this(numerator, 1);
        }


        public Fraction(int numerator, int denominator) {
           if (denominator == 0) {
              throw new RuntimeException("denominator == 0 is not  possible");
        }


       int gcd = Fraction.gcd(numerator, denominator);

       if (denominator / gcd < 0) {
         gcd *= -1;
       }

       this.numerator = numerator / gcd;

       this.denominator = denominator / gcd;
       }
     }

Теперь я хочу реализовать то, что Экземпляры дроби с одинаковыми числителем и знаменателем имеютта же ссылка, например,

 *Fraction.parseFraction("1/2").equals(Fraction.parseFraction("2/4"))*

должна возвращать true.

Я изучил некоторые главы об Общих и Границах, но я не уверен, является ли это даже правильным направлением того, что мне нужно.Должен ли класс Fraction быть привязан к String и Integer?

1 Ответ

0 голосов
/ 05 июня 2018

Что я хочу реализовать сейчас, так это то, что Экземпляры дроби с одним и тем же числителем и знаменателем имеют одну и ту же ссылку, например,

Я думаю, что вы имеете в виду одно и то же значение здесь?

Вы столкнетесь с проблемами, вычисляющими это значение с помощью целых чисел (а также с помощью чисел с плавающей запятой или двойных чисел) - выяснение, почему эти вещи сложны, и как вы можете их смягчить, научит вас многому.,

Узнайте о том, что делает String.intern () (например, это только первый результат Google: https://dzone.com/articles/string-interning-what-why-and), и сделайте то же самое, но для вашего класса Fraction.

...