package ru.alttiri.Simple.section3.stage4.step9;


/**
 Дан класс ComplexNumber. Переопределите в нем методы equals() и hashCode() так,
 чтобы equals() сравнивал экземпляры ComplexNumber по содержимому полей re и im,
 а hashCode() был бы согласованным с реализацией equals().

 Реализация hashCode(), возвращающая константу или не учитывающая дробную часть re и im, засчитана не будет


 Пример

 ComplexNumber a = new ComplexNumber(1, 1);
 ComplexNumber b = new ComplexNumber(1, 1);
 // a.equals(b) must return true
 // a.hashCode() must be equal to b.hashCode()


 Подсказка 1. Поищите в классе java.lang.Double статический метод, который поможет в решении задачи.
 Подсказка 2. Если задача никак не решается, можно позвать на помощь среду разработки,
 которая умеет сама генерировать equals() и hashCode().
 Если вы воспользовались помощью IDE, то разберитесь, что было сгенерировано и почему оно выглядит именно так.
 Когда вас на собеседовании попросят на бумажке реализовать equals() и hashCode() для какого-нибудь простого класса,
 то среда разработки помочь не сможет.
 */


public final class ComplexNumber {

    private final double re;
    private final double im;

    public ComplexNumber(double re, double im) {
        this.re = re;
        this.im = im;
    }

    public double getRe() {
        return re;
    }

    public double getIm() {
        return im;
    }



    public static  void main(String args[]) {

    }


}
@@ -44,16 +44,43 @@
 tep9;%0A%0A%0A
+import java.util.Objects;%0A%0A
 /**%0A %D0%94%D0%B0%D0%BD
@@ -1416,50 +1416,1993 @@
     
-public static  void main(String args%5B%5D) %7B%0A
+@Override%0A    public boolean equals(Object o) %7B%0A        if (this == o)%0A            return true;%0A        if (o instanceof ComplexNumber)%7B%0A            ComplexNumber other = (ComplexNumber)o;%0A            return other.re == this.re && other.im == this.im;%0A        %7D%0A        return false;%0A    %7D%0A%0A   @Override%0A   public int hashCode() %7B%0A        final int PRIME = 31;%0A        int result = 1;%0A        result = result*PRIME + Double.hashCode(re);%0A        result = result*PRIME + Double.hashCode(im);%0A        return result;%0A   %7D%0A%0A%0A //==== IDEA Alt+Insert =====================================%0A%0A//    @Override%0A//    public boolean equals(Object o) %7B%0A//        if (this == o) return true;%0A//        if (o == null %7C%7C getClass() != o.getClass()) return false;%0A//%0A//        ComplexNumber that = (ComplexNumber) o;%0A//%0A//        if (Double.compare(that.re, re) != 0) return false;%0A//        return Double.compare(that.im, im) == 0;%0A//    %7D%0A//%0A//    @Override%0A//    public int hashCode() %7B%0A//        int result;%0A//        long temp;%0A//        temp = Double.doubleToLongBits(re);%0A//        result = (int) (temp %5E (temp %3E%3E%3E 32));%0A//        temp = Double.doubleToLongBits(im);%0A//        result = 31 * result + (int) (temp %5E (temp %3E%3E%3E 32));%0A//        return result;%0A//    %7D%0A%0A//=== IDEA Alt+Insert Java 7+ =============================%0A%0A//    @Override%0A//    public boolean equals(Object o) %7B%0A//        if (this == o) return true;%0A//        if (o == null %7C%7C getClass() != o.getClass()) return false;%0A//        ComplexNumber that = (ComplexNumber) o;%0A//        return Double.compare(that.re, re) == 0 &&%0A//                Double.compare(that.im, im) == 0;%0A//    %7D%0A//%0A//    @Override%0A//    public int hashCode() %7B%0A//        return Objects.hash(re, im);%0A//    %7D%0A%0A    public static  void main(String args%5B%5D) %7B%0A%0A        ComplexNumber a = new ComplexNumber(1, 1);%0A        ComplexNumber b = new ComplexNumber(1, 1);%0A        System.out.println(a.equals(b));%0A        System.out.println(a.hashCode() == b.hashCode());
 %0A   

add section3.stage4.step9 template