0

次のコードのように、matrix1Col と matrix2Col を乗算メソッドに送信します。

しかし、境界を超えたインデックス 1 ではエラーです。

UIButton コード内から

double kk[2][2] = {{1,2},{5,6}};
double t [2][1] = {1,2};`

if (!matrix1Col) {
    matrix1Col = [NSMutableArray array];
}

for (unsigned int i=0; i<2; i++) {
    matrix1Row = [NSMutableArray new];
    for (unsigned int j=0 ; j<2; j++) {
        [matrix1Row addObject:@(kk[i][j])];
    }
    [matrix1Col addObject:matrix1Row];
}

if (!matrix2Col) {
    matrix2Col = [NSMutableArray array];
}

for (unsigned int i=0; i<2; i++) {
    matrix2Row = [NSMutableArray new];
    for (unsigned int j=0; j<1; j++) {
        [matrix2Row addObject:@(t[i][j])];
    }
    [matrix2Col addObject:matrix2Row];
}
NSMutableArray *resultMultiply = [self multiply:matrix1Col :matrix2Col];

ViewController.m の別のメソッド:

-(NSMutableArray*)multiply:(NSMutableArray*)matrix1 :(NSMutableArray*)matrix2{
int matrix1RowCount = [matrix1 count];
int matrix2RowCount = [matrix2 count];
int matrix2ColCount = [[matrix2 objectAtIndex:0] count];

NSMutableArray *multiplyMatrix = [NSMutableArray arrayWithCapacity:matrix1RowCount];
for (int i=0; i< matrix1RowCount; i++) {
    NSMutableArray *matrixInRow = [NSMutableArray arrayWithCapacity:matrix2ColCount];
    for (int j=0; j<matrix2RowCount; j++) {
        double valueTotal = 0;
        for (int k=0; k<matrix2ColCount; k++) {
            double value1 = [[[matrix1 objectAtIndex:i] objectAtIndex:k] doubleValue];
            double value2 = [[[matrix2 objectAtIndex:k] objectAtIndex:j] doubleValue];
            valueTotal += value1*value2;
        }
        [matrixInRow addObject:[NSNumber numberWithDouble:valueTotal]];
    }
    [multiplyMatrix addObject:matrixInRow];
}
return multiplyMatrix;
}

これはエラーコードです:

2013-02-14 06:26:06.595 matrixMutableArray[21578:c07] *** Terminating app due to                     uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
*** First throw call stack:

どこが間違っているのかわかりません。

コメントありがとうございます。

4

1 に答える 1

0

この行でエラーが発生します。

double value2 = [[[matrix2 objectAtIndex:k] objectAtIndex:j] doubleValue];

エラーが発生すると、k=0 および j=1 になります。matrix2 の objectAtIndex:0 にはオブジェクトが 1 つしかないため、エラーが発生します。

于 2013-02-14T00:38:05.497 に答える