gpt4 book ai didi

java - 编写 equals 方法来比较两个数组

转载 作者:行者123 更新时间:2023-12-02 12:03:39 25 4
gpt4 key购买 nike

我有以下代码,我相信我的 equals 方法出了问题,但我不知道出了什么问题。

public class Test {
private double[] info;
public Test(double[] a){
double[] constructor = new double[a.length];
for (int i = 0; i < a.length; i++){
constructor[i] = a[i];
}
info = constructor;
}

public double[] getInfo(){
double[] newInfo = new double[info.length];
for(int i = 0; i < info.length; i++){
newInfo[i] = info[i];
}
return newInfo;
}
public double[] setInfo(double[] a){
double[] setInfo = new double[a.length];
for(int i = 0; i < a.length; i++){
setInfo[i] = a[i];
}
return info;
}
public boolean equals(Test x){
return (this.info == x.info);
}
}

在我的测试器类中,我有以下代码:

public class Tester {

public static void main(String[] args) {
double[] info = {5.0, 16.3, 3.5 ,79.8}
Test test1 = new Test();
test 1 = new Test(info);
Test test2 = new Test(test1.getInfo());
System.out.print("Tests 1 and 2 are equal: " + test1.equals(test2));
}
}

我的其余方法似乎运行正常,但是当我使用 equals 方法并打印 boolean 值时,控制台在应该打印 true 时打印出 false。

最佳答案

您只是将内存引用与数组进行比较。您应该比较数组的内容。

首先比较每个数组的长度,然后如果它们匹配,则每次比较数组的全部内容。

这是一种实现方法(不使用帮助器/实用函数编写,因此您可以了解发生了什么):

public boolean equals(Test x) {

// check if the parameter is null
if (x == null) {
return false;
}

// check if the lengths are the same
if (this.info.length != x.info.length) {
return false;
}

// check the elements in the arrays
for (int index = 0; index < this.info.length; index++) {
if (this.info[index] != x.info[index]) {
return false;
} Aominè
}

// if we get here, then the arrays are the same size and contain the same elements
return true;
}

正如@Aominè上面评论的那样,您可以使用辅助/实用函数,例如(但仍然需要空检查):

public boolean equals(Test x) {

if (x == null) {
return false;
}

return Arrays.equals(this.info, x.info);
}

关于java - 编写 equals 方法来比较两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47063652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com