【问题标题】:Comparing int array element values Java比较int数组元素值Java
【发布时间】:2015-01-28 02:36:20
【问题描述】:

试图比较数组的元素。例如,如果 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) 的方法

【问题讨论】:

  • I either get a false false or a compiler error. 嗯,是哪个?如果这是编译器错误,为什么不在您的问题中分享它?
  • 抱歉,不小心遗漏了那部分代码。 square 是二维数组。尺寸由用户设置。两个维度始终相同。
  • 您可以编辑您的问题。并格式化。
  • 所以数组是引用类型。但是int 是原始类型。您对这些错误有什么不了解的地方?
  • 我理解这些错误。我想知道,如果有办法,我可以比较这两个元素。

标签: java arrays int compare


【解决方案1】:

基元(例如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);
    }
}

【讨论】:

    【解决方案2】:
    if(!square[row][col].equals(square[row][nextNum]))
    

    如果您的squareString 的数组,则上面的代码将起作用。

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

    使用== 比较原始类型,例如int.equals 比较String

    【讨论】:

    • .equals 将适用于(编译)any 对象(即非原始类型),因为equals-method 在java.lang.Object 中定义。
    【解决方案3】:

    您的代码中有多个问题:

    • 很可能会出现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 的数组有 索引0x-1

    • 你将row增加两次(for-loop 和SYSOUT

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

      这不适用于原始类型。根据您的例外,您尝试比较int-values。去==

    • 检查JavaDoc of Arrays#equals() method

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      • 2021-12-10
      • 2014-02-06
      相关资源
      最近更新 更多