-4
#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 是否正常工作。任何帮助都会很棒。

4

2 回答 2

2

您的convertToNum方法返回结果,但不会更改对象内的任何状态。因此,对 print 的调用会print打印出它所做的事情,因为从中返回的值convertToNum被完全忽略了。

将您更改print为:

-(void) print
{
    NSLog(@"%i/%i = %f", numerator, denominator, [self convertToNum]);
}
于 2013-01-25T17:14:24.347 回答
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);
}
于 2013-01-25T13:35:56.157 回答