2013-01-25 44 views
-3
#import <Foundation/Foundation.h> 

@interface Calculator : NSObject 

@property int numerator, denominator; 

-(void) print; 
-(double) convertToNum; 
@end 

#import "Calculator.h" 

@implementation Calculator 

@synthesize numerator, denominator; 

-(void) print 
{ 
    NSLog(@"%i/%i", numerator, denominator); 
} 

-(double) convertToNum 
{ 

    if (denominator != 0) 
    { 
     return (double) numerator/denominator; 
    } 
    else 
    { 
     return 25.68; 
    } 
} 
@end 

#import <Foundation/Foundation> 
#import "Calculator.h" 

int main(int argc, const char * argv[]) 
{ 

    Calculator *myCalc = [[Calculator alloc] init]; 



    @autoreleasepool 
    { 
     //int numerator, denominator; 
     //NSLog(@"Enter two numbers..."); 
     //scanf("%i %i", &numerator, &denominator); 

     [myCalc setNumerator: 8]; 
     [myCalc setDenominator: 0]; 
     NSLog(@"The value of myFraction is: "); 

     [myCalc convertToNum]; 
     [myCalc print]; 
    } 
    return 0; 
} 

出于某种原因,它总是返回它的一小部分。我将它设置为8和0只是一个例子,它返回8/0而不是我选择的随机数来检查else是否正在工作。任何帮助都会很棒。Objective-C ...为什么if语句不起作用?

+0

这个问题太简单了,它不属于这里。您应该在其他地方学习Objective-C编程,然后在您遇到更高级的问题时再回来。 – Minthos

+0

向我们展示'Calculator.h'。 – trojanfoe

+0

^好的,我添加了它。 大声笑我在这个网站上看到过比这个更基本的问题,而不是针对objective-c,但我从来没有看过 – user2011094

回答

1

在您的打印方法,你只打印它以这种方式,:

变化中的代码提示

-(void) print 
{ 
    //NSLog(@"%i/%i", numerator, denominator); 
    NSLog(@"%f", numerator/denominator); 
} 

怎么样[myCalc convertToNum];这种方法得到一些价值,但你放弃它!

你应该使用它作为:

double value=[myCalc convertToNum]; 
[self print:value]; 

,然后把这个valueprint

-(void) print:(double)value{ 
     NSLog(@"%f", value); 
} 
+0

'[值得打印]'???当然'[self print:value]'? – trojanfoe

+0

@trojanfoe:哎呀,对不起! C/C++风格...我在他的代码中读取了scanf,并且我进入了C++日子的梦境:D –

+1

如果你这么说;它看起来不像C或C++,'scanf()'是C,而不是C++ ...... – trojanfoe

2

convertToNum方法返回结果,但对象内不会改变任何状态。因此,对print的调用将打印它所做的操作,因为从convertToNum返回的值完全被忽略。

更改print到:

-(void) print 
{ 
    NSLog(@"%i/%i = %f", numerator, denominator, [self convertToNum]); 
}