调用函数时,int不能转换为int [] []

时间:2017-02-25 23:54:48

标签: java arrays

我试图编写一个划分和征服算法,在2d数组中找到一个元素。

功能原型:

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

调用:

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

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

行在开头计算为matrix.length,列为matrix [0] .length

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

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

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);