2011-12-25 4 views
0

私は、XcodeとiOS開発のユーティリティのいくつかに慣れるために、スターターアプリを開発しようとしています。私は二次方程式を解くアプリを作成しようとしています。私はこのコードを "Calculate"ボタンアクションの下に追加しようとしました。最初に私は3つの入力を一緒に加えるだけで "Calculate"を持っていました。今私はそれが方程式を解くようにしようとしています。これは私が今までに置いたものです。そして、私はあなたにこのことを非常に新しく思い出させてくれるので、私はおそらく非常に愚かで間違って見えるでしょう。Objecive C iOS開発の数学方程式

-(IBAction) Calculate { 

float x = ([A.text floatValue]); 
float y = ([B.text floatValue]); 
float z = ([C.text floatValue]); 

total.text =[NSString alloc]initWithFormat:@"%.2f", -y+sqrtf(y*y-4*x*z)/2*x; 

} 

これは完全な式ではありませんが、これは私がこれまで行ってきたことです。私が受け取るエラーは、セミコロンがある括弧を追加することです。誰かがこれをより効果的にする方法を知っていますか? solveEquation()関数を作成したかったのですが、問題が発生しました。誰が私が何をすることができるか知っていますか?どんな助けもありがとう!

+0

また、この2次方程式の[操作手順](http://ja.wikipedia.org/wiki/Order_of_operations)にご注意ください。 –

答えて

3

大括弧が必要です。

total.text = [[NSString alloc]initWithFormat:@"%.2f", -y+sqrtf(y*y-4*x*z)/2*x]; 

大カッコは、Objective-Cメッセージを送信していることを示します。送信するメッセージごとに、1組の括弧が必要です。このようにそれを打破してみましょう:最初の行で

NSString *uninitializedString = [NSString alloc]; 
NSString *initializedString = [uninitializedString initWithFormat:@"%.2f", x+y+z]; 
total.text = initializedString; 

、我々は実際にNSStringのインスタンスを割り当てる方法を知っているクラスオブジェクトであるNSStringオブジェクトにallocメッセージを送信します。しかし、ではなく、インスタンスを初期化します。それは、単にそれらのためのメモリを割り当てるだけです。

2行目では、割り当てられた初期化されていないインスタンスNSStringにメッセージを送信し、テンプレート%.2fを初期化するように指示します。このメッセージは、初期化されたインスタンスNSStringを返します。

最後に、3行目で、その初期化されたインスタンスNSStringを使用します。明らかに、割り当てられた初期化されていないオブジェクトを保持するために中間変数が常に必要なのは面倒なことです。最初のメッセージの結果を受け取り、直接メッセージを送信することでそれを排除します。

total.text = [[NSString alloc] initWithFormat:@"%.2f", x+y+z]; 
+0

さらに、簡単な書式文字列では、このようなエラーを表示しやすくなります。いくつかの変数を '-y + sqrtf(y * y-4 * x * z)/ 2 * x'に設定し、' initWithFormat: 'の変数を使って少し簡単に解析できるようにすることも考えられます。 –

+0

ありがとうございます。ええ、本当に助けてくれました。私はeveryonesの専門知識に感謝します! – jtrain

3

ブラケットがさらに必要です。正しい構文は[object message]で、[NSString alloc]がオブジェクトを返すので、[[NSString alloc] initWithFormat:@"%.2f", -y+sqrtf(y*y-4*x*z)/2*x](別のメッセージであるinitWithFormat:)が必要です。

関連する問題