试用版在iOS中执行while语句

时间:2012-02-13 10:35:37

标签: objective-c do-while

我是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。

2 个答案:

答案 0 :(得分:1)

请注意块范围。您的内部difference会遮挡外部,因此您可能希望通过简单地移除float来避免重新声明它。

此外,作为常规提示,请保留类的大写标识符。

答案 1 :(得分:1)

这一行是你的问题:

float difference = fabsf((Colebrook1-Colebrook2)*1000);

您已经在循环外声明了变量差异;没有必要在循环内再次声明它。

你可能想说:

difference = fabsf((Colebrook1-Colebrook2)*1000);

另外,您确定您的外部声明需要static吗?这意味着它的值在方法调用之间持续存在。这是有效的代码,但不常见。