java - 如何使用三个变量检查​​两个构造函数是否彼此相等?

标签 java constructor

我需要能够检查一个构造函数中的变量 a、b 和 c 是否等于另一个构造函数(二次 q)中的 a、b 和 c。我感觉我的复制构造函数可能是错误的,这也可能是问题所在。我正在尝试通过最后一种方法来实现这一点。忽略我现在里面的东西,我确信它是完全错误的。如果我能得到任何帮助,我将不胜感激。这是我到目前为止所拥有的:

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;
    }

}

最佳答案

提示。如果您使用 IntelliJ IDEA,则右键单击并生成... -> 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. 扫描仪应关闭
  4. 不要在构造函数中使用Scanner,这不属于该类。在客户端代码中使用它,然后调用构造函数
  5. double 值应与 Double.compare
  6. 进行比较
  7. equals() + hashCode() - 这是必须的(好吧,如果您不打算使用此类作为键,hashCode() 可能没用 HashMap ,但仍然 - 这应该是自动的)
  8. 手动实现equals() + hashCode()时,请注意规范。

关于java - 如何使用三个变量检查​​两个构造函数是否彼此相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53023563/

相关文章:

java - Spring工具套件IDE

java - 未找到 JNDI 上下文

C++ 总是使用显式构造函数

java - 在Python中实例化类——设置属性

constructor - 将强制数据传递给 Kotlin 中的父类(super class)

java - 书籍对象的 boolean 值

java - 获取所有类参数及其名称?

java - 如何在 ViewPager 上调用 invalidate()

java - 您如何在Java中定义构造函数?

java - Java构造函数和线程安全