2012-02-26 9 views
1

私はObjective Cに関するStephan Kochanの本を進めています。私は誰かが助けてくれることを望んでいる問題に立ち向かいました。ここで私のObjective Cコードに関するいくつかのポインターがあります。

は私がに取り組んできたフラクションクラスから私の印刷方法です:

-(void) print: (BOOL) reduce { 
Fraction *resultReduced = [[Fraction alloc] init]; 
[resultReduced setTo:numerator over:denominator]; 

if (denominator < 0) { 
    numerator = -numerator; 
    denominator = -denominator; 
}  
if (reduce) { 
    [resultReduced reduce]; 
    if (resultReduced.denominator < 0) { 
     resultReduced.denominator = -resultReduced.denominator; 
     resultReduced.numerator = -resultReduced.numerator; 
    } 
    else if (resultReduced.denominator == 1) 
     NSLog (@"%i", resultReduced.numerator); 
    else if (resultReduced.numerator == 0) 
     NSLog (@"0"); 
    else if (resultReduced.numerator == resultReduced.denominator) 
     NSLog (@"1"); 
    else if (resultReduced.numerator > resultReduced.denominator || resultReduced.numerator < 0) { 
     [resultReduced improper]; 
     if (resultReduced.whole == 0) 
      NSLog (@"%i/%i", resultReduced.numerator, resultReduced.denominator); 
     else if (resultReduced.whole < 0 && resultReduced.numerator < 0) { 
      resultReduced.numerator = -resultReduced.numerator; 
      NSLog (@"%i %i/%i", resultReduced.whole, resultReduced.numerator, resultReduced.denominator);    
     } 
     else 
      NSLog (@"%i %i/%i", resultReduced.whole, resultReduced.numerator, resultReduced.denominator); 
    } 
    else 
     NSLog (@"%i/%i", resultReduced.numerator, resultReduced.denominator); 
} 
else 
    NSLog (@"%i/%i", numerator, denominator); 

}

問題は、私は2/3から15/4を引く場合、私が得ることを-37であります/ 12このメッセージ[resultReduced improper]を使って-3 1/12として表示したいのですが、動作していないようです。私はそれがない、その後場合だけに

else if (resultReduced.numerator > resultReduced.denominator || resultReduced.numerator < 0) {

を変更した場合。

誰かが私に説明してくださいなぜ作品を使用する場合は、しかし、他の場合はありませんか?

+2

デバッガでプログラムをステップ実行することで問題を見つけることができます。 –

+0

どうすればいいですか? – CloudDweller

+0

Xcodeのデバッグに関する[リンクはこちら](https://developer.apple.com/library/mac/#documentation/ToolsLanguages/Conceptual/Xcode4UserGuide/Debugging/Debugging.html)をドキュメントにリンクします。 – user1118321

答えて

0

"if"文は、それだけで毎回実行されます。 「else」は、「if」が失敗した場合にのみ実行されます。

+0

さて、私はまだ、他の人を使っているのはなぜそうでないのか分かりません。申し訳ありませんが、私はコーディングに全く新しいと言いましたが、私はまだ基​​本について苦労しています。 – CloudDweller

+0

分母は0より大きいので、分母が1に等しいかどうかを調べるために下に移動します。そうでないときは、それは0に等しいかどうかをチェックするために下に移動します。次に分母と同じかどうかを確認するために下に移動しますが、分母と同じではありません。だから、どうすれば私が苦労しているものに動かないの? – CloudDweller

+0

また、私はelse(resultReduced.numerator <0)を使用してみましたが、どちらも動作しませんでした。なぜなら、-37/12というのは、分子が0よりも小さいことを意味するからです。 。 – CloudDweller

関連する問題