假设我有一个NxN矩阵,其中包含1到10范围内的随机整数。现在,我想打电话
PROC(A(1:n/2, 1:n/2)+A(n/2+1:n, n/2+1:n)...
其中n是矩阵的大小。换句话说,我想从A的第一行和第一行开始制作子矩阵,直到A的一半,然后将其添加到以A加一的大小的一半开始的子矩阵中,直到结束甲
我正在使用的分区功能是:
public Matrix partition(int rowStart, int rowEnd, int colStart, int colEnd) {
// int r = 0;
// int c = 0;
if (this.N%2 != 0) throw new RuntimeException("Illegal matrix dimensions.");
Matrix C = new Matrix((this.N)/2);
for (int i=rowStart-1; i<rowEnd; i++) {
for (int j=colStart-1; j<colEnd; j++) {
C.data[i][j] = this.data[i][j];
// C.data[r][c] = this.data[i][j];
c++;
}
r++;
}
return C;
}
现在,这适用于查找给定矩阵左上角(Matrix C = m.partition(1, m.size()/2, 1, m.size()/2);
)的子矩阵。
9.00 5.00 0.00 3.00
0.00 7.00 8.00 3.00
9.00 3.00 10.00 8.00
0.00 6.00 2.00 0.00
9.00 5.00
0.00 7.00
但是当我尝试获得另一个子矩阵(Matrix D = m.partition(m.size()/2+1, m.size(), m.size()/2+1, m.size());
)时,我得到了ArrayIndexOutOfBoundsException: 2
。我已经尝试将单独的行和列计数器添加到我的分区函数,但它给出了相同的错误。如何修改分区功能以使用所有输入并仍然提供正确的输出?
答案 0 :(得分:1)
C.data[i][j] = this.data[i][j];<-- Culprit
i
为rowStart-1
,j为rowEnd-1
,您需要i
而j
从{0}开始C.data
for (int i=rowStart-1,p=0; i<rowEnd; i++,p++) {
for (int j=colStart-1,q=0; j<colEnd; j++,q++) {
C.data[p][q] = this.data[i][j];
}
}