在下面的代码中,我想在循环结束时计算强度的净总和,但是 Objective-C 在 NSlog 中调用了 zsum 未声明的变量。如何在循环结束时计算 Sum 并将其传递到循环外。
NSMutableArray *arr = [[NSMutableArray alloc] init];
for (int x = 1; x < 20; x++) {
double zsum = 0;
NSMutableArray *row = [NSMutableArray new];
for (int y = 1; y < 20; y++) {
uchar intensity= curFrame.at<uchar>(cvPoint(y, x));
double zebra = double (intensity)/255;
zsum+= zebra;
[row addObject:[NSNumber numberWithChar:intensity]];
}
// NSLog(@"%d", x);
//NSLog(@"%f",d);
[arr addObject:[NSNumber numberWithInt:zsum]];
// [matrix addObject:row];
}
NSLog(@“%f",zsum);
最佳答案
所以将 zsum 的声明移到 for 循环之外,在 arr 声明之后和 for 循环之前:
NSMutableArray *arr = [[NSMutableArray alloc] init];
double zsum = 0;
for (int x = 1; x < 20; x++) {
//The rest of your for loop code goes here.
}
在 Objective-C 中,任何时间代码都包含在定义新范围的大括号({
和 }
)中。在这些大括号内声明的任何变量只存在于这些大括号内。当您退出大括号时,变量“超出范围”并且不再存在。在外部作用域中定义的变量对嵌套更深层次的作用域可见,但对外部作用域不可见。
{
int a;
{
//a is visible
int b;
//a and b are both visible
}
//b is no longer visible
{
//int c
//a and c are visible
{
int d;
//a, c, and d are visible
}
//a and c are visible, d is no longer visible.
}
//only a is visible
}
//None of the vars are visible
上面的代码很做作,但有效。您可能不会使用仅定义范围级别的大括号,但您可以。它们更有可能包含 block 、if 语句的主体、函数等。
关于ios - Objective C 在循环外分配数组变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41317959/