-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 に設定すると、else が機能しているかどうかを確認するために選択した乱数の代わりに 8/0 が返されます。どんな助けでも素晴らしいでしょう。

4

2 に答える 2

2

convertToNumメソッドは結果を返しますが、オブジェクト内の状態は変更しません。したがって、printから返される値convertToNumは完全に無視されるため、toの呼び出しはそれが行うことを出力します。

次のように変更printします。

-(void) print
{
    NSLog(@"%i/%i = %f", numerator, denominator, [self convertToNum]);
}
于 2013-01-25T17:14:24.347 に答える
1

print メソッドでは、その方法でのみ印刷しています:

コードで提案されているように変更します

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

このメソッドはなんらかの値を取得して[myCalc convertToNum];いますが、それを破棄しています!!!

次のように使用する必要があります。

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

そして、これvalueをに送信しますprint

-(void) print:(double)value{
        NSLog(@"%f", value);
}
于 2013-01-25T13:35:56.157 に答える