【问题标题】:Looping through two arrays to check if equal循环遍历两个数组以检查是否相等
【发布时间】:2014-04-19 05:21:00
【问题描述】:

尝试检查两个数组是否相等,即长度相同且元素位置相同。

我已经尝试过 Arrays.equals(1,2) 但它仍然显示为假,而它需要显示为真。

我试图创建一个嵌套的 for 循环来检查每个索引,但我仍然得到错误。

我的代码:

public boolean equals(double[] s) //for loop checking each element
{
    if (s==null)
    {
        return false;
    }
    for (int i=0;i<data.length;i++)
    {
        for(int j=0;j<s.length;j++)
        {
            if (data[i]!=s[j])
            {
                return false;
            }
        }
    }
    return true;

}

【问题讨论】:

  • 如果数组确实相等,那么 Arrays.equals(a,b) 应该返回 false 是不可能的。你是怎么调用的,这两个数组的类型到底是什么?

标签: java arrays equals


【解决方案1】:

不要重新发明轮子!

public boolean equals(double[] s) {
    return Arrays.equals(s, data);
}

Arrays.equals() 比较数组长度和每个元素。

【讨论】:

    【解决方案2】:

    如果您想查看它们是否具有相同的元素,但您不关心它们是否具有相同的顺序,请先对它们进行排序。

    Arrays.sort(data);
    Arrays.sort(s);
    return Arrays.equals(data,s);
    

    【讨论】:

      【解决方案3】:

      您不需要嵌套循环来检查元素。实际上,从某种意义上说,您的代码是错误的,因为它检查了从一个数组到另一个数组的所有元素。

      你可能想要

      // Check to make sure arrays have same length
      if (data.length != s.length) 
         return false;
      
      for (int i=0;i<data.length;i++)
      {
          if (data[i]!=s[i])
          {
             return false;
          }
      }
      return true;
      

      【讨论】:

      • 糟糕,我错过了分号。现在编辑,谢谢@laune
      【解决方案4】:

      你可以如下使用:

      if(arr1.length!=arr2.length) 
         return false;
      
      for(int index=0;index<arr1.length;index++)
      {
          if (arr1[index]!=arr2[index])
               return false;
      
      }
      return true;
      

      【讨论】:

      • 如果 Arrays.equals 不起作用,这个也不会。 – 刚刚劳恩
      猜你喜欢
      • 2020-04-04
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 2016-01-10
      • 2021-08-03
      相关资源
      最近更新 更多