Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c float-vlue返回0?_Objective C_Cocoa_Ios4_Xcode4 - Fatal编程技术网

Objective c float-vlue返回0?

Objective c float-vlue返回0?,objective-c,cocoa,ios4,xcode4,Objective C,Cocoa,Ios4,Xcode4,好的,这将是一个有点长,我为此道歉,但在这里 我正在开发的应用程序是一个计算体脂百分比的“健身”应用程序。它有公的一面和母的一面 我有三节课是男生的,三节课是女生的 maleBFCinput maleBFCdata maleBFCresults femaleBFCinput femaleBFCdata femaleBFCresults 在输入类中,我有用于用户输入的文本字段,计算在“maleBFCinput.m”中进行。一旦计算完成,它们将被传输到“data”类,然后再传输到“

好的,这将是一个有点长,我为此道歉,但在这里

我正在开发的应用程序是一个计算体脂百分比的“健身”应用程序。它有公的一面和母的一面

我有三节课是男生的,三节课是女生的

 maleBFCinput 
 maleBFCdata
 maleBFCresults

 femaleBFCinput
 femaleBFCdata
 femaleBFCresults
在输入类中,我有用于用户输入的文本字段,计算在“maleBFCinput.m”中进行。一旦计算完成,它们将被传输到“data”类,然后再传输到“results”类

男性的一面完美无瑕。然而,问题出在女性方面。在结果上,我有7个标签。年龄/身高/体重/最小体重/最大体重/体脂/允许体脂

女性结果上的“bodyfat”标签返回0。使用我用来计算男性侧边的相同技术(按预期工作),我一直得到0

我在输入屏幕上使用浮点数来保存较小计算中的所有“tempValue”,然后进入“bodyfat计算”

下面是我的一些小代码

femaleBFCinput.h

    UITextField *ageInput;
    UITextField *heightInput;
    UITextField *weightInput;
    UITextField *hips1Input;
    UITextField *hips2Input;
    UITextField *hips3Input;
    UITextField *neck1Input;
    UITextField *neck2Input;
    UITextField *neck3Input;
    UITextField *abdomen1Input;
    UITextField *abdomen2Input;
    UITextField *abdomen3Input;

    float heightFactor;
    float weightFactor;
    float abHipsFactor;
    float abFactor;
    float neckFactor;
    float minWeight;
    float maxWeight;
    float maxBodyFatPercentage;
    float abdomenAvg;
    float neckAvg;
    float hipsAvg;
    float abHipsValue;
    float abNeckSubValue;
    float bodyFatPercentage;
    float circumferenceValue;

}

@property(nonatomic,retain) IBOutlet UITextField *ageInput;
@property(nonatomic,retain) IBOutlet UITextField *weightInput;
@property(nonatomic,retain) IBOutlet UITextField *heightInput;
@property(nonatomic,retain) IBOutlet UITextField *abdomen1Input;
@property(nonatomic,retain) IBOutlet UITextField *abdomen2Input;
@property(nonatomic,retain) IBOutlet UITextField *abdomen3Input;
@property(nonatomic,retain) IBOutlet UITextField *neck1Input;
@property(nonatomic,retain) IBOutlet UITextField *neck2Input;
@property(nonatomic,retain) IBOutlet UITextField *neck3Input;
@property(nonatomic,retain) IBOutlet UITextField *hips1Input;
@property(nonatomic,retain) IBOutlet UITextField *hips2Input;
@property(nonatomic,retain) IBOutlet UITextField *hips3Input;

- (float) getMinWeight;
- (float) getMaxWeight;
- (float) getCircumferenceValue;
- (float) getMaxBodyFatPercentage;
- (float) getAbdomenAvg;
- (float) getNeckAvg;
- (float) getAbHipsFactor;
- (float) getBodyFatPercentage;
- (float) getHipsAvg;
femaleBFCinput.m

// Get Abdomen Avg..

- (float) getAbdomenAvg
{
    float abdomen1Float = [abdomen1Input.text floatValue];
    float abdomen2Float = [abdomen2Input.text floatValue];
    float abdomen3Float = [abdomen3Input.text floatValue];

    (abdomenAvg = ((abdomen1Float + abdomen2Float + abdomen3Float) / 3));

    return abdomenAvg;
}

// Get Neck Avg..

- (float) getNeckAvg
{
    float neck1Float = [neck1Input.text floatValue];
    float neck2Float = [neck2Input.text floatValue];
    float neck3Float = [neck3Input.text floatValue];

    (neckAvg = ((neck1Float + neck2Float + neck3Float) / 3));
    return neckAvg;
}

// Get Hips Avg..

- (float) getHipsAvg
{
    float hips1Float = [hips1Input.text floatValue];
    float hips2Float = [hips2Input.text floatValue];
    float hips3Float = [hips3Input.text floatValue];

    (hipsAvg = ((hips1Float + hips2Float + hips3Float) / 3));
    return hipsAvg;
}

//-----Get AbNeck Factor----------------------------------

- (float) getAbHipsFactor
{
    float abTempAvg = [self getAbdomenAvg];
    float hipsTempAvg = [self getHipsAvg];

    (abHipsValue = (abTempAvg + hipsTempAvg));

    return abHipsValue;
}


//----Get Circumference Value-----------------------------

- (float) getCircumferenceValue
{

    (circumferenceValue = (abHipsValue - neckAvg));

    return circumferenceValue;
}

// Get Body Fat Percentage..

- (float) getBodyFatPercentage
{
    float circumferenceTempValue = [self getCircumferenceValue];
    float heightTempValue = [heightInput.text floatValue];


    if (heightTempValue >= 58.00 && heightTempValue <= 58.49) {
        if (circumferenceTempValue >= 45.00 && circumferenceTempValue <= 45.49) {bodyFatPercentage = 19;}
        else if (circumferenceTempValue >= 45.50 && circumferenceTempValue <= 45.99) {bodyFatPercentage = 20;}
        else if (circumferenceTempValue >= 46.00 && circumferenceTempValue <= 46.49) {bodyFatPercentage = 21;}
        else if (circumferenceTempValue >= 46.50 && circumferenceTempValue <= 46.99) {bodyFatPercentage = 21;}

 else if (heightTempValue >= 77.50 && heightTempValue <= 77.99) {
        if (circumferenceTempValue >= 53.50 && circumferenceTempValue <= 53.99) {bodyFatPercentage = 19;}
        else if (circumferenceTempValue >= 54.00 && circumferenceTempValue <= 54.49) {bodyFatPercentage = 20;}
        else if (circumferenceTempValue >= 54.50 && circumferenceTempValue <= 54.99) {bodyFatPercentage = 20;}
        else if (circumferenceTempValue >= 55.00 && circumferenceTempValue <= 55.49) {bodyFatPercentage = 21;}

        etc..
        etc.. (theres about 4000ish lines of if / else if statements in here so i just pasted a few so you see what i have)

        else if (circumferenceTempValue >= 77.50 && circumferenceTempValue <= 77.99) {bodyFatPercentage = 45;}
        else if (circumferenceTempValue >= 78.00 && circumferenceTempValue <= 78.49) {bodyFatPercentage = 46;}
        else if (circumferenceTempValue >= 78.50 && circumferenceTempValue <= 78.99) {bodyFatPercentage = 46;}
        else if (circumferenceTempValue >= 79.00 && circumferenceTempValue <= 79.49) {bodyFatPercentage = 47;}
    }

    return bodyFatPercentage;

}



- (IBAction)calculate:(id)sender {

    FemaleBFCresults *femaleBFCresults = [[FemaleBFCresults alloc] initWithNibName:@"FemaleBFCresults" bundle:nil];

    FemaleBFCdata *femaleBFCData = [[FemaleBFCdata alloc] init];
    femaleBFCresults.femaleBFCdata = femaleBFCData;

    femaleBFCresults.femaleBFCdata.ageInput = ageInput.text;
    femaleBFCresults.femaleBFCdata.heightInput = heightInput.text;
    femaleBFCresults.femaleBFCdata.weightInput = weightInput.text;

    NSString *minWeightString = [[NSString alloc] initWithFormat:@"%.0f", [self getMinWeight]];
    femaleBFCresults.femaleBFCdata.minWeight = minWeightString;
    [minWeightString release];

    NSString *maxWeightString = [[NSString alloc] initWithFormat:@"%.0f", [self getMaxWeight]];
    femaleBFCresults.femaleBFCdata.maxWeight = maxWeightString;
    [maxWeightString release];

    NSString *maxBodyFatString = [[NSString alloc] initWithFormat:@"%.0f", [self getMaxBodyFatPercentage]];
    femaleBFCresults.femaleBFCdata.maxBodyFat = maxBodyFatString;
    [maxBodyFatString release];

    NSString *bodyFatString = [[NSString alloc] initWithFormat:@"%.0f", [self getBodyFatPercentage]];
    femaleBFCresults.femaleBFCdata.bodyFat = bodyFatString;
    [bodyFatString release];


    femaleBFCresults.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:femaleBFCresults animated:YES];
    [self.view removeFromSuperview];
    [femaleBFCresults release];

}
femaleBFCdata.m

@synthesize ageInput;
@synthesize heightInput;
@synthesize weightInput;
@synthesize neckAvg;
@synthesize abAvg;
@synthesize hipsAvg;
@synthesize abHipFactor;
@synthesize bodyFat;
@synthesize maxBodyFat;
@synthesize minWeight;
@synthesize maxWeight;
@synthesize circumference;

- (void)dealloc {

    self.ageInput = nil;
    self.heightInput = nil;
    self.weightInput = nil;
    self.neckAvg = nil;
    self.abAvg = nil;
    self.hipsAvg = nil;
    self.abHipFactor = nil;
    self.bodyFat = nil;
    self.maxBodyFat = nil;
    self.minWeight = nil;
    self.maxWeight = nil;
    self.circumference = nil;
    [super dealloc];
}
@synthesize femaleBFCdata;
@synthesize displayAge;
@synthesize displayHeight;
@synthesize displayWeight;
@synthesize displayBodyFat;
@synthesize displayMaxBodyFat;
@synthesize displayMinWeight;
@synthesize displayMaxWeight;

- (void)viewDidLoad {

    self.displayAge.text = femaleBFCdata.ageInput;
    self.displayHeight.text = femaleBFCdata.heightInput;
    self.displayWeight.text = femaleBFCdata.weightInput;
    self.displayBodyFat.text = femaleBFCdata.bodyFat;
    self.displayMaxBodyFat.text = femaleBFCdata.maxBodyFat;
    self.displayMinWeight.text = femaleBFCdata.minWeight;
    self.displayMaxWeight.text = femaleBFCdata.maxWeight;

    [super viewDidLoad];
}

- (void)dealloc {

    [displayAge dealloc];
    [displayHeight dealloc];
    [displayWeight dealloc];
    [displayBodyFat dealloc];
    [displayMaxBodyFat dealloc];
    [displayMinWeight dealloc];
    [displayMaxWeight dealloc];

    [super dealloc];
}
女性结果

@interface FemaleBFCresults : UIViewController {

    FemaleBFCdata *femaleBFCdata;
    UILabel *displayAge;
    UILabel *displayHeight;
    UILabel *displayWeight;
    UILabel *displayBodyFat;
    UILabel *displayMaxBodyFat;
    UILabel *displayMinWeight;
    UILabel *displayMaxWeight;

}

@property (nonatomic, retain) FemaleBFCdata *femaleBFCdata;
@property (nonatomic, retain) IBOutlet UILabel *displayAge;
@property (nonatomic, retain) IBOutlet UILabel *displayHeight;
@property (nonatomic, retain) IBOutlet UILabel *displayWeight;
@property (nonatomic, retain) IBOutlet UILabel *displayBodyFat;
@property (nonatomic, retain) IBOutlet UILabel *displayMaxBodyFat;
@property (nonatomic, retain) IBOutlet UILabel *displayMinWeight;
@property (nonatomic, retain) IBOutlet UILabel *displayMaxWeight;

- (IBAction)goBack:(id)sender;

@end
femaleBFCdata.m

@synthesize ageInput;
@synthesize heightInput;
@synthesize weightInput;
@synthesize neckAvg;
@synthesize abAvg;
@synthesize hipsAvg;
@synthesize abHipFactor;
@synthesize bodyFat;
@synthesize maxBodyFat;
@synthesize minWeight;
@synthesize maxWeight;
@synthesize circumference;

- (void)dealloc {

    self.ageInput = nil;
    self.heightInput = nil;
    self.weightInput = nil;
    self.neckAvg = nil;
    self.abAvg = nil;
    self.hipsAvg = nil;
    self.abHipFactor = nil;
    self.bodyFat = nil;
    self.maxBodyFat = nil;
    self.minWeight = nil;
    self.maxWeight = nil;
    self.circumference = nil;
    [super dealloc];
}
@synthesize femaleBFCdata;
@synthesize displayAge;
@synthesize displayHeight;
@synthesize displayWeight;
@synthesize displayBodyFat;
@synthesize displayMaxBodyFat;
@synthesize displayMinWeight;
@synthesize displayMaxWeight;

- (void)viewDidLoad {

    self.displayAge.text = femaleBFCdata.ageInput;
    self.displayHeight.text = femaleBFCdata.heightInput;
    self.displayWeight.text = femaleBFCdata.weightInput;
    self.displayBodyFat.text = femaleBFCdata.bodyFat;
    self.displayMaxBodyFat.text = femaleBFCdata.maxBodyFat;
    self.displayMinWeight.text = femaleBFCdata.minWeight;
    self.displayMaxWeight.text = femaleBFCdata.maxWeight;

    [super viewDidLoad];
}

- (void)dealloc {

    [displayAge dealloc];
    [displayHeight dealloc];
    [displayWeight dealloc];
    [displayBodyFat dealloc];
    [displayMaxBodyFat dealloc];
    [displayMinWeight dealloc];
    [displayMaxWeight dealloc];

    [super dealloc];
}

正如我所说的,男性课程采用完全相同的方式,这是完美的。但是在女生的课程上,我的成绩一直是零,我似乎不知道为什么。我已经做了几个月了。我休息了几个星期,我想在休息之前我已经开始工作了,但我想我没有。有人有什么想法可以帮我解决这个问题吗?

你绝对确定你的输入字段出口都连接好了吗?向零出口询问其-floatValue将得到零(解释为0)响应。

好的,所以我在进入“bodyfatcalculations”之前计算的所有“平均值”四舍五入,使其正常工作

是的,这就是我的解决方案,所有的if/else if语句都没有错,事实上,除以3得到的平均值给了我一个比我需要的更长的小数点,所以通过将它们四舍五入到最接近的一半,解决了我的问题。现在我得到了一个很好的答案


谢谢大家的帮助

嗯。然后在代码中设置一个断点,使代码“跳过”一步。现在是学习如何使用GDB的最佳时机。顺便问一下,你确定你的类层次结构很聪明吗?将雌雄类的公共代码重构为公共超类以使其更易于维护,这是更好的解决方案吗?您绝对必须学会使用调试器。没有崩溃/异常/无论什么都不意味着没有问题。在触发所有此行为的任何操作上设置断点,并循序渐进地进行操作,确保检查所有相关变量以确保其值符合预期。调试器是每个开发人员的必备工具。空间不足。补充:相信我,只要花一点时间和理解力,一个全新的世界就会向您敞开大门,让您能够解决代码中的问题。就像白天和黑夜一样。@Shaun Hornsby:你可以在任何地方设置它们,只要它们在语句块中(在函数或方法定义之外放置断点是没有用的)。在最终使用该值之前设置第一个断点;如果您发现插座未连接或发现其他问题,请在连续的调试运行中通过程序反向解决该问题。@shaun hornsby我知道设计或多或少“聪明”的类层次结构是复杂的。通常,开发人员首先构建了一个过于复杂的类结构,最终很难维护。这总是一种权衡。如果你想了解可可更深层次的原理,请阅读《可可设计模式》一书。