检查两个序列是否具有相同顺序的相同值(从java开始)

时间:2013-12-06 03:53:33

标签: java arrays methods sequence

我想在我创建的类中添加一个方法,检查这两个序列是否具有相同顺序的相同值。

这是我到目前为止所做的:

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)
...??

我认为类的第一部分是正确的,但是我在测试值是否在同一顺序的方法时遇到了很多麻烦。我们非常感谢您的想法和反馈。)

5 个答案:

答案 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()方法即使不是公开的,也可以访问valuesthis的{​​{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将是更好的选择