1

多くの数学と計算を行うアプリを構築しています。ラベルに表示されるスライダー値があり、それらの値を関数で使用して最終値を取得する必要があります。私はこれらのスライダー値を持っています (数値は、数式をテストして機能するかどうかを確認するためのユーザー入力として持っているものです):

Ageslider=20, weightslider=144, feetslider=5,inchesslider=9.03.

最初に重量、フィート、およびインチをメートル法に変換して、全体的な式にプラグインする必要がありますが、ユーザーはそれらの値を確認する必要はありません。それらをメトリックに変換する式は次のとおりです。

weightslider/2.2,  feetslider*12*2.54,   inchesslider*2.54.

全体的な式は次のとおりです。

66.473+5.0033*((feetslider*12.2.54)+(inchesslider*2.54))+13.7516*(weightslider/2.2)-6.755*ageslider

または簡略化すると、元の式は次のようになります。

66.473+5.0033*(height in cm)+13.7516*(weight in kg)-6.755*age

数式を入力すると

(66.473+5.0033*((feetslider*12.2.54)+(inchesslider*2.54))+13.7516*(weightslider/2.2)-6.755*ageslider)

次に、プログラムを実行し、プログラムでテスト番号を使用します。最終的な値を必要な値に等しくすることができません。計算式を Excel に入力し、正しい演算順序で計算機を実行して get を取得し1708.7373ました。プログラムで実行すると、 が表示され1747.7ます。

次に、式のスライダー値の前に (float) を入れてみたところ、プログラムは次のようになりました1718.67。次に、スライダー値の前に (double) を入れてみましたが、プログラムは次のようになりました: 1689.62. 私が使用しているxcodeからコピーされた実際のコードは次のとおりです。

label.text = [[NSString alloc] initWithFormat:@"%.2f",66.473+(5.0033*((feetslider.value*12*2.54)+(inchesslider.value*2.54)))+(13.7516*(weightslider.value/2.2))-(6.755*ageslider.value)];

また、警告が表示されます。代入は、キャストなしで整数からポインターを作成します。その意味がわかりません。

誰かが私を助けてください、私は正しい答えを得て警告を取り除くために数式を変更しようとして何時間もこれに固執してきましたが、私は一生それを得ることができません!!!

ありがとう!

アップデート!!ここに私が今持っている正確なコードがありますが、まだ正しい答えが出ていません。プログラムを実行すると、「割り当てにより、キャストなしで整数からポインターが作成されます」というエラーが引き続き表示されます。「if(malebutton = Yes)」の行に表示されます。

-(IBAction)malebutton{ if (malebutton = YES) {

    //Intermediate values
    float totalWeight;
    totalWeight = weightslider.value*.45454545;
    float heightFeetToCM;
    heightFeetToCM =feetslider.value*12*2.54;
    float heightInchesToCM;
    heightInchesToCM = inchesslider.value*2.54;
    float totalHeight; 
    totalHeight = heightFeetToCM + heightInchesToCM;

    //Final Component Values
    float calculatedHeight;
    calculatedHeight = 5.0033*totalHeight;
    float calculatedWeight;
    calculatedWeight = 13.7516*totalWeight;
    float calculatedAge;
    calculatedAge = 6.755*ageslider.value;

    //Total Value
    float finalValue;
    finalValue = 66.473 + calculatedHeight + calculatedWeight - calculatedAge;

    totalcaloriesburnedlabel.text = [[NSString alloc] initWithFormat:@"%.2f",finalValue];

更新 2;

スライダーをラベルに接続する方法は次のとおりです。フォーマットは、それぞれに表示した小数点以下の桁数を除いて、すべて同じです。

-(IBAction)changeLabelFeet { feetLabel.text = [[NSString alloc] initWithFormat: @"%.0f",feetSlider.value]; }

4

1 に答える 1

0

元の回答からの更新:私は戻ってXcodeで自分で試しました。問題が計算にあるかどうかを確認するために、値 (float age = 20;) を書き込むことから始め、1708.74 という正しい答えを得ました (文字列の float に .2f を設定した場合)。次に、スライダーから値を取得することが問題であるかどうかを確認することにしました。スライダーの年齢だけから始めて、他のすべてがまだハードコーディングされていました。最初は間違った答えを得て、IB でスライダーを接続していないことにすぐに気付きました。 . それを修正した後、私は正しい答えを得ました。これが私のコードです。

.h

@interface ViewController : UIViewController {

IBOutlet UILabel *myLabel;
IBOutlet UISlider *ageSlider;
IBOutlet UISlider *weightSlider;
IBOutlet UISlider *feetSlider;
IBOutlet UISlider *inchesSlider;


}

@property (nonatomic, retain) IBOutlet UILabel *myLabel;
@property (nonatomic, retain) IBOutlet UISlider *ageSlider;
@property (nonatomic, retain) IBOutlet UISlider *weightSlider;
@property (nonatomic, retain) IBOutlet UISlider *feetSlider;
@property (nonatomic, retain) IBOutlet UISlider *inchesSlider;

@end

.m

@interface ViewController ()

@end

@implementation ViewController

@synthesize myLabel;
@synthesize ageSlider;
@synthesize weightSlider;
@synthesize feetSlider;
@synthesize inchesSlider;

-(void)calculateLabel{

//float age = 20;
float age = ageSlider.value;
NSLog(@"My age slider value is %.2f", ageSlider.value);
//float weight = 144;
float weight = weightSlider.value;
NSLog(@"My weight slider value is %.2f", weightSlider.value);
//float heightFeet = 5;
float heightFeet = feetSlider.value;
NSLog(@"My feet slider value is %.2f", feetSlider.value);
//float heightInches = 9.03;
float heightInches = inchesSlider.value;
NSLog(@"My inches slider value is %.2f", inchesSlider.value);


float weightKG = weight*.454545;
float heightFeetToCM = heightFeet * 12 * 2.54;
float heightInchesToCM = heightInches * 2.54;
float totalHeight = heightFeetToCM + heightInchesToCM;

float calculatedHeight = 5.0033 * totalHeight;
float calculatedWeight = 13.7516 * weightKG;
float calculatedAge = 6.755 * age;

float finalValue = 66.473 + calculatedHeight + calculatedWeight - calculatedAge;

myLabel.text = [NSString stringWithFormat:@"%.2f", finalValue];

}

- (void)viewDidLoad
{
    [super viewDidLoad];


    [self calculateLabel];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

@end

まず、NSLog が次のようになっていることを確認してください.....

2012-06-17 23:57:53.557 Testing6[1404:10103] 年齢スライダーの値は 20.00 です

2012-06-17 23:57:53.559 Testing6[1404:10103] ウェイト スライダーの値は 144.00 です

2012-06-17 23:57:53.559 Testing6[1404:10103] 足のスライダーの値は 5.00 です

2012-06-17 23:57:53.559 Testing6[1404:10103] インチ スライダーの値は 9.03 です

その後も機能しない場合、他に考えられる唯一のことは、スライダーが継続的に更新されていない可能性が高いということです (別名、スライダーの値を示すラベルは、ユーザーの年齢で 20 を表示していますが、実際には 19 に設定されています)。私の古いXcodeプロジェクトを掘り下げれば、それについてあなたを助けることができるかもしれません. お知らせ下さい。

于 2012-06-16T04:30:33.120 に答える