我需要能够检查一个构造函数中的变量 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);
}
}
- 如果可能,请使用最终类变量。
- 使用
this
访问类变量,但不访问方法参数 扫描仪
应关闭- 不要在构造函数中使用
Scanner
,这不属于该类。在客户端代码中使用它,然后调用构造函数 double
值应与Double.compare
进行比较
equals() + hashCode()
- 这是必须的(好吧,如果您不打算使用此类作为键,hashCode()
可能没用 HashMap ,但仍然 - 这应该是自动的)- 手动实现
equals() + hashCode()
时,请注意规范。
关于java - 如何使用三个变量检查两个构造函数是否彼此相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53023563/