在下面的代码中,我想计算循环结束时的强度净值,但是目标C在NSlog中调用zsum undeclared变量。如何在结束时循环计算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);
答案 0 :(得分:1)
因此,在声明arr之后和for循环之前,将zsum的decaration移动到for循环之外:
import 'codemirror/theme/3024-night.css'
const options = {
lineNumbers: true,
readOnly: false,
mode: 'htmlmixed',
theme:'3024-night'
};
...
<Codemirror ref="editor" value={this.props.value} onChange={this.props.updateCode} options={options}/>
在Objective-C中,任何时间代码都包含在定义新范围的大括号(NSMutableArray *arr = [[NSMutableArray alloc] init];
double zsum = 0;
for (int x = 1; x < 20; x++) {
//The rest of your for loop code goes here.
}
和{
)中。在这些大括号内声明的任何变量只存在于这些大括号内。退出大括号时,变量&#34;超出范围&#34;并且不再存在。外部作用域中定义的变量对于更深层嵌套的作用域级别是可见的,但不在外部。
}
上面的代码非常人为,但有效。您可能不会有仅仅定义范围级别的大括号,但您可以。更有可能的是,它们会封闭块,if语句,函数等等。