Я пробираюсь по книге Стефана Кочана о Цели C и столкнулся с проблемой, с которой, я надеюсь, кто-то может помочь.
Вот мой метод печати из класса Fraction, над которым я работал:
-(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);
}
Проблема в том, что если вычесть 15/4 из 2/3, я получу -37/12, который я хотел бы отобразить как -3 1/12, используя это сообщение [resultReduced Properper], но оно Работа. Если я изменю
else if (resultReduced.numerator > resultReduced.denominator || resultReduced.numerator < 0) {
просто так, если это так.
Может кто-нибудь объяснить мне, почему использование if работает, а если нет -