检查两个数组是否具有相同顺序的相同元素的方法

时间:2014-02-20 03:32:52

标签: java arrays boolean

我首先要说的是,我已经在这个问题上工作了好几个小时但没有成功。我已经浏览了互联网,我找到的任何东西都没有提供帮助。

问题很简单: 写一个方法

 public static boolean equals(int[] a, int[] b)

检查两个数组是否具有相同顺序的相同元素。

到目前为止,我对阵列没有任何问题,而且我开始怀疑整个班级是否有问题。

这是我目前的代码,这是我在整个晚上尝试的众多变体之一,它们都给出了相同的结果。我意识到这可能不是最好的语法,但它是我上次谷歌搜索的结果。

int[] a = {1, 4, 9, 16, 9, 7, 4, 9, 11};
int[] b = {1, 4, 9, 16, 7, 7, 4, 9, 11};

public static boolean equals(int[] a, int[] b) { 
 if (a.length != b.length)
       return false;
     for (int i = 0; i < a.length; i++)
       if (a[i] != b[i])
         return false;
     return true;
   }

如您所见,数组只有一个元素不同。该方法每次都会返回false,无论它们是否相等。我用过

Arrays.equals(a,b);

Arrays.equals(a[i], b[i]);

每次都返回false。我正在使用Dr.Java,而交互面板允许您输入任何表达式。多次我在交互面板中声明了两个数组,然后使用上面的第一个方法对它们进行比较,然后返回true。

此刻我完全失败了。任何帮助都表示赞赏,如果之前已经提出过这个问题我会道歉,但我觉得我的情况很独特。

编辑:

System.out.println( "equals(): " + equals(a, b)  );

是对equals方法的调用。

编辑#2:

以下是该课程的完整代码,它是一个预制的家庭作业模板,这就是我避免发布整个内容的原因。

有问题的方法是P6.9

import java.util.Arrays;

class Homework5 {

public static void main(String[] args) {

 int[] a = {1, 4, 9, 16, 9, 7, 4, 9, 11};
 int[] b = {1, 4, 9, 16, 7, 7, 4, 9, 11};

 //P6.6
 System.out.println( "P66(): " + P66(a) ); // should print: P68(): -2 

 //P6.7
 System.out.println( "P67(): " + prettyPrint( P67(a) ) );   //should print: P67(): [11, 9, 4, 7,      9, 16, 9, 4, 1] 

 //P6.9
 System.out.println( "equals(): " + equals(a, b)  ); // should print: P69(): false 

 //P6.10
 System.out.println( "sameSet(): " +  sameSet(a, b)  ); // should print:  P610(): true 

}

//this method can be used to see a nice visual representation of an array of ints
public static String prettyPrint(int[] array) {
 if (array == null) {
 return "null"; 
 }
 String answer = "[";
 for (int i=0; i< array.length; i++) {
 answer += array[i] + ", ";
 }
 answer = answer.substring(0, answer.length() -2);
 answer += "]";
 return answer; 
 }


//***************************
//*****  Problem P6.6  ******
//***************************

//Problem P6.6
public static int P66(int[] array) {
  int sum = array[0];
  for (int i = 0; i < (array.length - 1); i++) {
    if ((i % 2) == 0) {
      sum -= array[i + 1];
    }
    else {
      sum += array[i + 1];
    }
  }
 return sum;
 }

//***************************
//*****  Problem P6.7  ******
//***************************

//Problem P6.7
public static int[] P67(int[] array) {
  if ((array.length % 2) == 0) {
   for (int i = 0; i <= ((array.length / 2 ) - 1); i++) {
   int a = array[i];
   int b = array[array.length - (i + 1)];
   array[i] = b;
   array[array.length - (i + 1)] = a;
  }
  }
  else {
   for (int i = 0; i <= (array.length / 2 ); i++) {
   int a = array[i];
   int b = array[array.length - (i + 1)];
   array[i] = b;
   array[array.length - (i + 1)] = a;
  }
  }
 return array;
 }

//***************************
//*****  Problem P6.9  ******
//***************************

//Problem P6.9
public static boolean equals(int[] a, int[] b) { 
  if (a.length != b.length)
       return false;
     for (int i = 0; i < a.length; i++)
       if (a[i] != b[i])
         return false;
     return true;
   }

//***************************
//*****  Problem P6.10  *****
//***************************

//Problem P6.10
public static boolean sameSet(int[] a, int[] b) {
return false;
}

}

2 个答案:

答案 0 :(得分:1)

您对P67的调用正在修改您传递给它的数组。因此,当您致电a时,您在数组equals中没有原始值。删除说

的行
System.out.println( "P67(): " + prettyPrint( P67(a) ) );

答案 1 :(得分:0)

奇怪,因为当我在Intelli IDEA中运行代码时 - 它有效。基本情况为假。当我将7改为9以获得匹配时,我得到了真实。如果我删除一个元素 - 我会回复。

我同意格式化可以改进,但对我来说,代码有效,除非我遗漏了问题。

这是我的IDE中的代码,稍作修改:

package util;

/**
 * Created by mike on 2/19/14.
 */
public class SOArrays {

public static int[] a = {1, 4, 9, 16, 9, 7, 4, 9, 11};
public static int[] b = {1, 4, 9, 16, 7, 4, 9, 11};
//public static int[] b = {1, 4, 9, 16, 9, 7, 4, 9, 11};
//public static int[] b = {1, 4, 9, 16, 7, 7, 4, 9, 11};

public static boolean equals(int[] a, int[] b) {
    if (a.length != b.length)
        return false;
    for (int i = 0; i < a.length; i++)
        if (a[i] != b[i])
            return false;
    return true;
}

public static void main(String[] args) {
    System.out.println("equals: "+SOArrays.equals(a, b));
}
}

这很有效。