我正在尝试制作一个像长时间添加一样的添加方法,所以我想从最后开始添加并向后工作,这样我就可以正确地使用等等。所以我目前正在努力开始工作向后翻过阵列。 例如,我想做什么。 两个数组,字符为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;
}
答案 0 :(得分: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;
}
现在我们可以清楚地看到所有问题。
[a count] - 1
转到1
。你应该一路走到0。a
和b
可能有不同的尺寸,因此,如果您只[a count] - 1
到0
,那么,例如[b count] < [a count]
,您将获得尝试访问b[i]
时,索引超出范围错误。c
的末尾添加内容,但是您应该将其添加到c
的开头,因为您正在向后迭代。c[i]
。答案 1 :(得分:0)
你是从一个空数组'c'开始的,你的NSLog c [i]在第一次迭代时显然不在界限范围内。