试图比较数组的元素。例如,如果数组 [0][0] 等于数组 [0][1],则希望返回一个布尔值。 我想看看两个元素是否不相等会更容易。所以
boolean rowAlike = true;
for(int row = 0; row<size; row++)
{
for(int col = 0;col<size;col++)
{
nextNum = col + 1;
if(!square[row][col].equals(square[row][nextNum]))
rowAlike=false;
}
if(rowAlike)
System.out.println("All digits are the same in row " +row++);
由于数组是参考变量,我知道 == 将比较内存位置而不是这些元素的值。我在上面试过了,也试过
Arrays.equals(square[row][col],(square[row][nextNum])
我要么得到一个错误的错误,要么得到一个编译器错误。
编辑:我收到的错误错误是使用时==
我得到一个编译器错误使用.equals
探索矩阵.java:89:错误:int 无法取消引用
当使用数组时,等于
探索矩阵.java:89:错误:找不到适合 equals(int,int) 的方法
基元(如int
)通过带有==
和/或!=
的值进行测试(视情况而定)。您需要在循环体中定义rowAlike
(否则它不会在下一行重置)。col == size - 1
时访问col + 1
将导致 ArrayIndexOutOfBounds。我建议你从1
开始,然后与前一个进行比较。接下来,您可以在第一次找到不匹配的值时break
循环。最后,对于显示,不应修改 row
的值(否则将跳过一行)。把这一切放在一起,
int[][] square = new int[size][size];
//
// ... Setup values in square ...
//
for (int row = 0; row < size; row++) {
boolean rowAlike = true;
for (int col = 1; col < size; col++) {
if (square[row][col - 1] != square[row][col]) {
rowAlike = false;
break;
}
}
if (rowAlike) {
System.out.printf("All digits are the same in row %d%n",
row + 1);
}
}
if(!square[row][col].equals(square[row][nextNum]))
如果您的square
是String
数组,则上面的代码将起作用。
不幸的是,您在问题中没有定义square
。
使用 ==
比较基元类型(如 int
)和.equals
进行比较String
代码中存在多个问题:
-
最有可能的是,发生
ArrayIndexOutOfBoundsException
(这是一个RuntimeException
) 在这里:for(int col = 0;col<size;col++){ nextNum = col + 1; if(!square[row][col].equals(square[row][nextNum])) //... }
在最后一次迭代中,
col
将被size-1
,这意味着nextNum
将等于数组大小。x
具有的大小数组指数0
x-1
. -
您
row
递增两次(for
循环和SYSOUT
) -
我知道==会比较内存位置
这不适用于基元类型。根据您的异常,您尝试比较
int
值。去==
. - 检查 JavaDoc 的
Arrays#equals()
方法。