2011-04-02 94 views
1

好吧,這將是有點長,我爲此道歉,但在這裏。float vlaue返回0?

我正在使用的應用程序是一個「健身」應用程序,可以計算人體脂肪百分比。它有一個男性的一面和一個女性的一面。

我有3班男性和3班女性。

maleBFCinput 
maleBFCdata 
maleBFCresults 

femaleBFCinput 
femaleBFCdata 
femaleBFCresults 

在輸入類中,我有用於用戶輸入的textfields,在「maleBFCinput.m」中進行計算。計算完成後,它們被轉移到「數據」類,然後轉移到「結果」類。

男方完美無瑕。然而,女性方面是問題所在。在results.xib我有7個標籤。年齡/身高/體重/最低體重/最大體重/體脂/允許身體脂肪。

女性結果上的「bodyfat」標籤返回0。使用相同的技術,我用來計算男性方面,它的工作原理,我一直得到0.

我在輸入屏幕上使用浮動來保存所有的「tempvalues」從較小的計算,然後去進入「身體脂肪計算」。

下面是我的代碼小snipets。

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.h

@interface FemaleBFCdata : NSObject { 


    NSString *ageInput; 
    NSString *heightInput; 
    NSString *weightInput; 
    NSString *neckAvg; 
    NSString *abAvg; 
    NSString *hipsAvg; 
    NSString *abHipFactor; 
    NSString *bodyFat; 
    NSString *maxBodyFat; 
    NSString *minWeight; 
    NSString *maxWeight; 
    NSString *circumference; 

} 

@property (nonatomic, retain) NSString *ageInput; 
@property (nonatomic, retain) NSString *heightInput; 
@property (nonatomic, retain) NSString *weightInput; 
@property (nonatomic, retain) NSString *neckAvg; 
@property (nonatomic, retain) NSString *abAvg; 
@property (nonatomic, retain) NSString *hipsAvg; 
@property (nonatomic, retain) NSString *abHipFactor; 
@property (nonatomic, retain) NSString *bodyFat; 
@property (nonatomic, retain) NSString *maxBodyFat; 
@property (nonatomic, retain) NSString *minWeight; 
@property (nonatomic, retain) NSString *maxWeight; 
@property (nonatomic, retain) NSString *circumference; 

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]; 
} 

femaleBFCresults.h

@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 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]; 
} 

就像我說的這是做完全相同的方式,這是男性類作品完美。但在女性班上,我一直在結果班上獲得0回報,我似乎無法弄清楚爲什麼。我已經在這裏工作了幾個月了。我休息了幾個星期,我想我有這個工作之前,我休息一下,但我想我沒有。任何人有任何想法可以幫助我解決這個問題嗎?

回答

0

好了,所以我得到它通過舍所有的「平均數」,我是在計算前我到了「bodyfatcalculations」

- (float)getabHipAvg { 
    float ab1 = [abdomen1Input.text floatValue]; 
    float ab2 = [abdomen2Input.text floatValue]; 
    float ab3 = [abdomen3Input.text floatValue]; 
    float hip1 = [hips1Input.text floatValue]; 
    float hip2 = [hips2Input.text floatValue]; 
    float hip3 = [hips3Input.text floatValue]; 

    (abHipAvg = (((ab1+ab2+ab3)/3)+((hip1+hip2+hip3)/3))); 
    abHipAvg = roundf(abHipAvg * 2.0f)/2.0f; 

    return abHipAvg; } 

- (float)getneckAvg { 
    float neck1 = [neck1Input.text floatValue]; 
    float neck2 = [neck2Input.text floatValue]; 
    float neck3 = [neck3Input.text floatValue]; 

    (neckAvg = ((neck1+neck2+neck3)/3)); 
    neckAvg = roundf(neckAvg * 2.0f)/2.0f; 

    return neckAvg; 
     } 

- (float)getCircumferenceValue { 
    float abHipTempAvg = [self getabHipAvg]; 
    float neckTempAvg = [self getneckAvg]; 

    (circumferenceValue = (abHipTempAvg - neckTempAvg)); 
    circumferenceValue = roundf(circumferenceValue *2.0f)/2.0f; 

    return circumferenceValue; } 

所以啊這就是我的解決方案的工作,有什麼不對的所有if/else if語句,事實上將3除以得到平均值會給我一個比我需要的更長的小數,所以通過將它們舍入到最接近的一半來解決我的問題。現在我得到的答案是出來。

感謝大家的幫助!

3

您是否確定您的輸入插座全部連接?向它的-floatValue詢問一個零插座會給你一個零(解釋爲0)的響應。

+0

是的,他們都是相連的,這就是爲什麼它把我扔掉。我只是再次檢查確認,他們連接.. – 2011-04-02 16:30:42

+0

你有沒有在調試器中的代碼,並驗證每個輸入和輸出是你期望它? – 2011-04-02 16:31:47

+0

不,我沒有得到任何類型的錯誤,所以我沒想到我需要..我甚至不知道如何使用調試器是誠實的。這是我第一次使用xcode,所以仍然很多我必須學習它 – 2011-04-02 16:34:48