2012-02-26 47 views
1

我正在通过Stephan Kochan关于Objective C的一本书,我想到了一个希望有人可以帮忙的问题。编程新手,想要一些关于我的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我想显示为-3 1/12使用此消息[resultReduced不当],但它似乎不工作。只是,如果然后它如果我改变

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

来。

难道有人请向我解释为什么使用如果作品,但如果别的不?

+2

您应该能够通过在调试器中逐步执行程序来查找问题。 – 2012-02-26 15:48:29

+0

你能解释一下如何做到这一点? – CloudDweller 2012-02-26 15:49:11

+0

[这里有一个链接](https://developer.apple.com/library/mac/#documentation/ToolsLanguages/Conceptual/Xcode4UserGuide/Debugging/Debugging.html)到Xcode中的调试文档。 – user1118321 2012-02-26 15:55:24

回答

0

“if”语句本身每次都会执行。 “else”只有在“if”失败时才会执行。

+0

好的,但我仍然不明白为什么使用其他工具,如果不工作,就好像这样。对不起,就像我说过的,我对编码完全陌生,而且我仍然在为基础努力奋斗。 – CloudDweller 2012-02-26 15:59:40

+0

因为分母大于0,它会下移检查它是否等于1。因为它不是,它会下移检查它是否等于0。然后它下移以检查它是否与分母相同,但它不是。那么为什么它不会下降到我正在努力的那个,除非我使用if和not if? – CloudDweller 2012-02-26 16:06:40

+0

另外,我尝试使用其他如果(resultReduced.numerator <0)但这并没有工作,我不明白为什么作为-37/12意味着分子小于0,所以肯定它应该为此运行代码。 – CloudDweller 2012-02-26 16:14:38