CloudDweller
CloudDweller

Reputation: 33

New to coding and would like some pointers regarding my Objective C code

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

Answers (1)

user1118321
user1118321

Reputation: 26395

The "if" statement by itself will execute every time. The "else" will only execute if the "if" fails.

Upvotes: 0

Related Questions