我首先要说的是,我已经在这个问题上工作了好几个小时但没有成功。我已经浏览了互联网,我找到的任何东西都没有提供帮助。
问题很简单: 写一个方法
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;
}
}
答案 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));
}
}
这很有效。