我想在我创建的类中添加一个方法,检查这两个序列是否具有相同顺序的相同值。
这是我到目前为止所做的:
public class Sequence {
private int[] values;
public Sequence(int size) { values = new int[size]; }
public void set(int i, int n) { values[i] = n; }
}
public boolean equals (Sequence other)
...??
我认为类的第一部分是正确的,但是我在测试值是否在同一顺序的方法时遇到了很多麻烦。我们非常感谢您的想法和反馈。)
答案 0 :(得分:1)
如果你想说两个序列是等于的,你可以覆盖equals
方法和hashCode
来遵循合同。
使用Eclipse工具的示例:
public class Sequence {
private int[] values;
public Sequence(int size) { values = new int[size]; }
public void set(int i, int n) { values[i] = n; }
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Arrays.hashCode(values);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Sequence other = (Sequence) obj;
if (!Arrays.equals(values, other.values))
return false;
return true;
}
}
然后在主要课程中你可以做以下事情
public static void main(String args[]){
Sequence s = new Sequence(5);
Sequence s2 = new Sequence(5);// new Sequence(4)
s.set(0, 1);
s2.set(0, 1);
System.out.println(s.equals(s2));//will print true
}
你必须注意,如果你使用我的评论代码(新序列(4)),这将返回false,也许不是你想要的!然后你必须实现自己的equals
而不是由ide自动生成。
答案 1 :(得分:0)
数组有一个内置的.equals()
方法:.equals(int[], int[])
很简单,但希望这有帮助。
答案 2 :(得分:0)
public boolean equals (Sequence other) {
// if sizez are different, automatic false
if (this.getValues().length != other.getValues().length)
return false;
else
int[] array1 = other.getValues();
int[] array2 = this.getValues();
// if any indices are not equal, return false
for (int i = 0; i < other.getValues().length; i++){
if (array1[i] != array2[i])
return false;
}
// it not returned false, return true
return true;
}
答案 3 :(得分:0)
首先,您需要将.equals()
方法作为Sequence类的成员。否则,您只能访问一个Sequence对象。
如果要检查2个数组是否具有相同顺序的相同元素,您需要做的就是依次比较每个元素。这个元素的第一个元素是否与另一元素的第一个元素相同,等等。当您遇到一对不同的元素时,您将能够返回false
。否则,您可以在检查每对元素后返回true
。
您可能遇到的一个问题是不同大小的数组。根据您要执行的操作,您可能希望立即返回false而不检查元素,或者在到达较短数组的末尾时停止。基于你的问题,你可能想要前者,但这取决于你想要解决的问题。
您的.equals()
方法即使不是公开的,也可以访问values
和this
的{{1}}数组。这是因为允许作为Sequence类函数的other
访问Sequence的所有成员,即使在.equals()
以外的Sequence对象中也是如此。
有了这些信息,您应该能够编写this
方法。
答案 4 :(得分:-2)
public boolean equals (Sequence other){
int[] first = this.getValues();
int[] second = other.getValues();
boolean same = true;
if(first.length != second.length){
return false;
}
for(int i = 0; i < first.length; i++){
if(first[i] != second[i]){
return false;
}
}
return same;
}
注意:你必须在Sequence类中使values数组公开,或者在Sequence类中添加一个getter方法...... getter将是更好的选择