Как проверить, равны ли два конструктора друг другу с тремя переменными? - PullRequest
0 голосов
/ 27 октября 2018

Мне нужно иметь возможность проверить, равны ли переменные a, b и c одного конструктора a, b и c другого конструктора (Quadratic q). У меня возникает ощущение, что мой конструктор копирования может быть неправильным, и это также может быть проблемой. Я пытаюсь сделать это с помощью последнего метода. Не обращайте внимания на то, что у меня там сейчас, я уверен, что это совершенно неправильно. Буду признателен за любую помощь, которую я могу получить. Это то, что я до сих пор:

import java.util.Scanner;

public class Quadratic
{
    // instance variables - replace the example below with your own
    private double a;
    private double b;
    private double c;

    /**
     * Assignment constructor
     */
    public Quadratic(double aIn, double bIn, double cIn)
    {
        a=aIn; b=bIn; c=cIn;
    }

    /**
     * Copy constructor of class Quadratic for objects 
     */
    public Quadratic(Quadratic q)
    {
        a=q.a;b=q.b;c=q.c;
    }

    /**
     * Default constructor - uses Scanner class.
     */
    public Quadratic()
    {
       Scanner in = new Scanner(System.in);
       System.out.println("Enter a: ");
       double a=in.nextDouble();
       System.out.println("Enter b: ");
       double b= in.nextDouble();
       System.out.println("Enter c: ");
       double c= in.nextDouble();
    }

    /**
     * Returns an expression for the quadratic, i.e., 1.0x^2 + 3.0x + 2.0
     */
    public String toString()
    {
        return a+"x^2 + "+b+"x + " + c;
    }

    /**
     * Returns true if a, b, and c all match for this & q; false otherwise.
     */
    public boolean equals(Quadratic q)
    {

        if (Quadratic(q).equalsQuadratic(a,b,c))
            return true;
        else
            return false;
    }

}

1 Ответ

0 голосов
/ 27 октября 2018

Совет.Если вы используете IntelliJ IDEA, щелкните правой кнопкой мыши и выберите Generate ... -> equals () и hashCode ();

public final class Quadratic {

    private final double a;
    private final double b;
    private final double c;

    public Quadratic(double a, double b, double c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public Quadratic(Quadratic quadratic) {
        this(quadratic.a, quadratic.b, quadratic.c);
    }

    @Override
    public String toString() {
        return a + "x^2 + " + b + "x + " + c;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (!(obj instanceof Quadratic))
            return false;
        Quadratic quadratic = (Quadratic)obj;
        return Double.compare(quadratic.a, a) == 0 &&
                Double.compare(quadratic.b, b) == 0 &&
                Double.compare(quadratic.c, c) == 0;
    }

    @Override
    public int hashCode() {
        return Objects.hash(a, b, c);
    }
}
  1. Используйте конечную переменную класса, если это возможно.
  2. Используйте this для доступа к переменной класса, но не параметр метода
  3. Scanner долженбыть закрытым
  4. Не используйте Scanner в конструкторе, это не относится к классу.Используйте его в клиентском коде, а затем вызовите конструктор
  5. double значения должны быть сопоставлены с Double.compare
  6. equals() + hashCode() - это должно быть (ну, hashCode() может быть бесполезнымесли вы не планируете использовать этот класс в качестве ключа в хэш-карте, но все же - это должно быть автоматически)
  7. При реализации equals() + hashCode() вручную обратите внимание на спецификацию.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...