Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何用三个变量检查两个构造函数是否相等?_Java_Constructor - Fatal编程技术网

Java 如何用三个变量检查两个构造函数是否相等?

Java 如何用三个变量检查两个构造函数是否相等?,java,constructor,Java,Constructor,我需要能够检查一个构造函数中的变量a、b和c是否等于另一个构造函数q中的变量a、b和c。我觉得我的复制构造函数可能是错误的,这也可能是问题所在。我正试图通过最后一种方法来实现这一点。忽略我现在在里面的东西,我肯定这是完全错误的。如果能得到任何帮助,我将不胜感激。这就是我到目前为止所做的: import java.util.Scanner; public class Quadratic { // instance variables - replace the example below

我需要能够检查一个构造函数中的变量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,则右键单击并生成…->等于和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);
    }
}
如果可能的话,使用final类变量。 使用此选项可以访问类变量,但不能访问mehtod参数 扫描仪应该关闭 不要在构造函数中使用Scanner,它不属于该类。在客户端代码中使用它,然后调用构造函数 应将double值与double.compare进行比较 equals+hashCode-这是必须的,如果您不打算将该类用作哈希映射中的键,hashCode可能是无用的,但是-这应该是自动的 当手动实现equals+hashCode时,一定要注意规范。
为什么你有一个复制构造函数?它让我觉得爪哇是不需要的C++习惯用法。你想确定A、B、C与另一个A、B、C、私有变量不可使用的对象是否相同。reference@oleg.cherednik不,我想确定a,b,c与另一个构造函数中的a,b,c是相同的。因此,如果该类的两个实例具有相同的a、b、c值,它将返回true。为什么不重写equals方法并使用a、b、c进行比较?@VinceEmigh cause quadratic.a将失败..-这是正确的代码语法,请参阅learch文档:-为什么要使用Double.compare而不是==?@JohnKugelman这并没有回答我的问题。Double.compare仍然进行精确比较,与==。