0

我正在尝试制作一个类似于长加法的添加方法,所以我想从最后开始加法并向后工作,这样我就可以正确地进行进位等等。所以我目前正试图开始向后工作大批。例如我想做什么。两个字符为 123456789 的数组,我想从 9 + 9 开始添加它们,然后移动到 8+8

所以我很确定我正在使用正确的方法在数组上向后迭代,但每次我尝试时都会遇到运行时错误,索引超出范围,我不知道为什么。任何帮助都会很棒,我只是不知道为什么它一直抛出异常。

-(MPInteger *) add: (MPInteger *) x
{

    NSMutableArray *a = self->intString;
    NSMutableArray *b = x->intString;
    NSMutableArray *c = [NSMutableArray arrayWithCapacity:100];



    //for (int i  = 0; i < [a count]; i++) {
    for (NSInteger i = [a count] - 1; i > 0; i--) {
        int num = 10;
        NSNumber *ourNum = [NSNumber numberWithInt:num];
        NSNumber *total = [NSNumber numberWithInt:[[a objectAtIndex:i] intValue] + [[b objectAtIndex:i] intValue]];
        if ([total intValue] >= [ourNum intValue]) {
            total = [NSNumber numberWithInt:([total intValue] - [ourNum intValue])];
            [c addObject:[NSNumber numberWithInt:([total intValue])]];
        } else {
            [c addObject:[NSNumber numberWithInt:[[a objectAtIndex:i] intValue]+[[b objectAtIndex:i] intValue]]];
        }
        NSLog(@"%@", c[i]);
    }

    return x;
}
4

2 回答 2

4

首先,让我们清理这段代码。

- (MPInteger *)add:(MPInteger *)x {
    NSMutableArray *a = self->intString;
    NSMutableArray *b = x->intString;
    NSMutableArray *c = [NSMutableArray arrayWithCapacity:100];

    for (NSInteger i = [a count] - 1; i > 0; i--) {
        int num = 10;
        NSNumber *ourNum = @(num);
        NSNumber *total = @([a[i] intValue] + [b[i] intValue]);

        if ([total intValue] >= [ourNum intValue]) {
            total = @([total intValue] - [ourNum intValue]);
            [c addObject:@([total intValue])];
        } else {
            [c addObject:@([a[i] intValue] + [b[i] intValue])];
        }

        NSLog(@"%@", c[i]);
    }

    return x;
}

接下来,让我们删除冗余/重复代码。

- (MPInteger *)add:(MPInteger *)x {
    NSMutableArray *a = self->intString;
    NSMutableArray *b = x->intString;
    NSMutableArray *c = [NSMutableArray arrayWithCapacity:100];

    for (NSInteger i = [a count] - 1; i > 0; i--) {
        int num = 10;
        NSNumber *total = @([a[i] intValue] + [b[i] intValue]);

        if ([total intValue] >= num) {
            total = @([total intValue] - num);
        }

        [c addObject:total];

        NSLog(@"%@", c[i]);
    }

    return x;
}

现在我们可以清楚地看到所有问题。

  1. 你要从[a count] - 11。你应该一直到0。
  2. a并且b可能有不同的大小,所以如果你只做[a count] - 1to 0,那么例如[b count] < [a count],当你尝试访问时,你会得到一个 index out of bounds 错误b[i]
  3. 您正在将内容添加到 末尾c,但您应该将其添加到开头,c因为您正在向后迭代。
  4. 您不会将随身携带物品存放在任何地方。
  5. 您正在访问c[i],它不存在。
于 2013-08-28T21:25:45.267 回答
0

你从一个空数组'c'开始,你的 NSLog c[i] 在第一次迭代中显然超出了界限。

于 2013-08-28T21:23:52.350 回答