2013-01-25 46 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]); 
}