比较int数组元素值Java

时间:2015-01-28 02:36:21

标签: java arrays int compare

尝试比较数组的元素。例如,如果array [0] [0]等于array [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

我收到编译错误
  

ExploreMatrix.java:89:错误:int无法解除引用

使用Arrays.equals时

  

ExploreMatrix.java:89:错误:没有为equals(int,int)找到合适的方法

3 个答案:

答案 0 :(得分:0)

基元(例如int)使用==和/或!=(视情况而定)的值进行测试。您需要在循环体中定义rowAlike(或者它不会在下一行重置)。在col + 1时访问col == size - 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);
    }
}

答案 1 :(得分:0)

if(!square[row][col].equals(square[row][nextNum]))

如果您的squareString数组,则上述代码将有效。

很遗憾,您没有在问题中定义square

使用==比较基本类型,例如int.equals,以便比较String

答案 2 :(得分:0)

您的代码中存在多个问题:

  • 最有可能发生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的数组 index 0x-1

  • 您递增row两次(for - 循环和SYSOUT

  •   

    我知道==会比较内存位置

    这不适用于原始类型。根据您的例外情况,您尝试比较int - 值。转到==

  • 检查JavaDoc of Arrays#equals() method