I’m working my way through Stephan Kochan’s book on Objective C and I’ve come up against a problem which I’m hoping someone can help with.
Here’s my print method from a Fraction class that I’ve been working on:
-(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);
}
The problem is that if I subtract 15/4 from 2/3 I get -37/12 which I’d like to display as -3 1/12 using this message [resultReduced improper] but it doesn’t appear to work. If I change
else if (resultReduced.numerator > resultReduced.denominator || resultReduced.numerator < 0) {
to just if then it does.
Could someone please explain to me why using if works, but if else doesn’t?
The “if” statement by itself will execute every time. The “else” will only execute if the “if” fails.