比较 int 数组元素值 Java
Comparing int array element values Java
正在尝试比较数组的元素。例如,如果 array[0][0] 等于 array[0][1],则想要 return 一个布尔值。我认为查看两个元素是否不相等会更容易。所以
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])
我要么得到错误的错误,要么得到编译器错误。
编辑:我收到的 false false 是在使用 ==
时我收到编译器错误 .equals
ExploreMatrix.java:89: error: int cannot be dereferenced
而当使用 Arrays.equals
ExploreMatrix.java:89: error: no suitable method found for equals(int,int)
基元(例如int
)通过==
and/or !=
(视情况而定)的值进行测试。您需要在循环体中定义 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
)
I know that == will compare the memory locations
这不适用于基本类型。根据您的异常,您尝试比较 int
值。去 ==
.
- 勾选JavaDoc of
Arrays#equals()
method。
正在尝试比较数组的元素。例如,如果 array[0][0] 等于 array[0][1],则想要 return 一个布尔值。我认为查看两个元素是否不相等会更容易。所以
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])
我要么得到错误的错误,要么得到编译器错误。
编辑:我收到的 false false 是在使用 ==
时我收到编译器错误 .equals
ExploreMatrix.java:89: error: int cannot be dereferenced
而当使用 Arrays.equals
ExploreMatrix.java:89: error: no suitable method found for equals(int,int)
基元(例如int
)通过==
and/or !=
(视情况而定)的值进行测试。您需要在循环体中定义 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
)I know that == will compare the memory locations
这不适用于基本类型。根据您的异常,您尝试比较
int
值。去==
.- 勾选JavaDoc of
Arrays#equals()
method。