索引1超出边界时出错

时间:2013-02-13 23:50:03

标签: objective-c nsmutablearray

如下面的代码我想发送matrix1Col和matrix2Col到multiply方法。

但索引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:

我找不到它的错误。

感谢您的评论。

1 个答案:

答案 0 :(得分:0)

此行发生错误:

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

当错误发生时k = 0且j = 1。 matrix2的objectAtIndex:0只有一个对象,因此出错。