我是iOS编程/目标c的新手,我正在尝试进行迭代试验和错误计算,我被卡住了。通常这段代码在excel VBA中有用,所以我不确定如何在obj C中克服这个问题:
- (IBAction)calculate:(id)sender {
static float friction=2;
static float difference;
float Re = [pipe_id.text floatValue] * [fluid_velocity.text floatValue] / [kin_viscosity.text floatValue];
ReynoldsNo.text = [[NSString alloc]initWithFormat:@"%6.2f", Re];
do{
float Colebrook1 = 1/powf(friction,0.5);
float Colebrook2 = -2*log10f([RelativeRoughness.text floatValue]/(3.7*[pipe_id.text floatValue]) + 2.51/(Re*powf(friction,0.5)));
float difference = fabsf((Colebrook1-Colebrook2)*1000);
friction = friction - 0.000001;
FrictionFactor.text = [[NSString alloc]initWithFormat:@"%6.2f", friction];
Cole1.text = [[NSString alloc]initWithFormat:@"%6.2f", Colebrook1];
Cole2.text = [[NSString alloc]initWithFormat:@"%6.2f", Colebrook2];
}while (difference > 0.000001);
}
所以当我编译它时,摩擦的值保持在2.我的循环不起作用,所以整个试错的事情已经崩溃了。我需要一些帮助来看看如何在客观C中写出来。感谢您的帮助,ALM。
答案 0 :(得分:1)
请注意块范围。您的内部difference
会遮挡外部,因此您可能希望通过简单地移除float
来避免重新声明它。
此外,作为常规提示,请保留类的大写标识符。
答案 1 :(得分:1)
这一行是你的问题:
float difference = fabsf((Colebrook1-Colebrook2)*1000);
您已经在循环外声明了变量差异;没有必要在循环内再次声明它。
你可能想说:
difference = fabsf((Colebrook1-Colebrook2)*1000);
另外,您确定您的外部声明需要static
吗?这意味着它的值在方法调用之间持续存在。这是有效的代码,但不常见。