【问题标题】:int cannot be converted to int[][] while invoking the function调用函数时 int 不能转换为 int[][]
【发布时间】:2017-07-16 17:27:50
【问题描述】:

我尝试编写一种分治算法,在二维数组中找到一个元素。

函数原型:

public boolean searchMatrix(int[][] matrix, int target)

调用:

 x=searchMatrix(matrix[(rows-1)/2][columns],target);

错误是调用此 int 时无法转换为 int[][]

rows 在开始时计算为 matrix.length,columns 作为 matrix[0].length

【问题讨论】:

  • 您正在数组matrix 中查找一个int,然后使用它调用该方法。该方法需要对数组的引用,而不是 int。因此编译器抱怨。
  • matrix[(rows-1)/2][columns] 是存储在该特定位置的整数,而不是数组。您想通过该声明实现什么目标?从偏移量开始传递数组?
  • 收到了,非常感谢。我怎样才能传递矩阵的某个部分?
  • 我要传一半的数组
  • @VarunChopra 您应该创建另一个矩阵(另一个相同类型的变量 -> int[][])并将值设置在您需要的位置

标签: java arrays


【解决方案1】:

我想传递一半的数组

您可以从原始 matrix 数组创建一个单独的半数组,并将其传递给您的 searchMatrix 方法。

int[][] halfMatrix = new int[(rows-1)/2][columns];
for(int i=0;i<(rows-1)/2; i++) {
  for(int j=0;j<columns;j++) {
    halfMatrix[i][j] = matrix[i][j];
  }
}

 x=searchMatrix(halfMatrix,target);

如果您尝试使用divide and conquer 策略,从性能的角度来看这可能不会真正有成效,您可以通过以下方式进行:

int[][] halfMatrix = new int[(rows-1)/2][columns];
int[][] secondHalfMatrix = new int[(rows+1)/2][columns];
for(int i=0;i<(rows-1)/2; i++) {
  for(int j=0;j<columns;j++) {
    if(i<(rows-1)/2)
      halfMatrix[i][j] = matrix[i][j];
    else
      secondHalfMatrix[i-(rows-1)/2][j] = matrix[i][j];
  }
}

 x=searchMatrix(halfMatrix,target) || searchMatrix(secondHalfMatrix,target);

【讨论】:

  • 如果我想使用分而治之,我必须每次都这样做?
  • 查看我针对divide and conquer 要求所做的修改。
【解决方案2】:

如果你想继续在同一个数组中发送,你可以添加两个参数来显示长度和高度:

public boolean searchMatrix(int[][] matrix, int rows, int cols, int target)

后来称它为:

x=searchMatrix(matrix,(rows-1)/2,columns,target);

并且初始调用将具有原始的行数和列数。

编辑

如果你想传递数组的不同部分,你可以有一个额外的参数来告诉行数和列数。一般来说,这可能是有用的。

x=searchMatrix(matrix, rowStartIndex, noOfRows, columnStartIndex, noOfColumns, target);

【讨论】:

  • 他想要分而治之......也许他也应该通过起始列和行。
  • @JawadLeWywadi,是的,这是一个更好的主意。 OP 似乎要求他只发送前半行而列未更改,但我想一个通用的答案总是更有用。
猜你喜欢
  • 2023-03-09
  • 2014-06-04
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多