Reputation: 33
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?
Upvotes: 1
Views: 62
Reputation: 26395
The "if" statement by itself will execute every time. The "else" will only execute if the "if" fails.
Upvotes: 0