-2

私はiOSを学ぼうとしていて、スタンフォード大学のビデオをフォローしていて、電卓のサンプルを再現しようとしていました。しかし、何らかの理由で=ボタンが機能していないか、結果が得られません。私は段階的に運動を続けてきましたが、私のためにまったく働いていません。誰かがこれで私を助けることができます、私はそれを本当に感謝します。

//これは私のCalculator.hです

#import <UIKit/UIKit.h>
#import "CalculatorBrain.h"

@interface ViewController : UIViewController {

    IBOutlet UILabel *display;
    CalculatorBrain *brain;
    BOOL userIsInTheMiddleOfTypingANumber;
}
-(IBAction) digitPressed:(UIButton *) sender;
-(IBAction) operationPressed: (UIButton *) sender;


@end
<code>





//This is my Calculator.m 

<pre>
#import "ViewController.h"
#import "CalculatorBrain.h"


@implementation ViewController

-(CalculatorBrain *) brain
    {
    if (!brain) brain = [[CalculatorBrain alloc] init];

        return brain;
     }
-(IBAction) digitPressed:(UIButton *) sender
    {
    NSString *digit = [[sender titleLabel]text];

    if (userIsInTheMiddleOfTypingANumber)
    {
        [display setText:[[display text] stringByAppendingString:digit]];

    }else{

        [display setText:digit];
        userIsInTheMiddleOfTypingANumber = YES;


    }
}

-(IBAction) operationPressed: (UIButton *) sender
  {

    if (userIsInTheMiddleOfTypingANumber)
  {
        [[self brain] setOperand:[[display text] doubleValue]];
        userIsInTheMiddleOfTypingANumber = NO;

  }
    NSString *operation = [[sender titleLabel] text];
    double result = [[self brain] performOperation:operation];
    [display setText:[NSString stringWithFormat:@"%g", result]];
  }

@end
<code>





//This is my CalculatorBrain.h

<pre>
#import <Foundation/Foundation.h>

@interface CalculatorBrain : NSObject {

    double operand;
    NSString *waitingOperation;
    double waitingOperand;


}
-(void)setOperand:(double)anOperand;
-(double)performOperation:(NSString *) operation;

@end
<code>





//This is my CalculatorBrain.m
<pre>
#import "CalculatorBrain.h"

@implementation CalculatorBrain

-(void)setOperand:(double)anOperand{

    operand = anOperand;

}
-(void) performWaitingOperation{

    if ([@"+" isEqual:waitingOperation])
    {
        operand = waitingOperand + operand;
    }
    else if ([@"*" isEqual:waitingOperation])
    {
        operand = waitingOperand - operand;
    }
    else if ([@"-" isEqual:waitingOperation])
    {
        operand = waitingOperand * operand;
    }
    else if([@"/" isEqual:waitingOperation])
    {

        if (operand)
        {
            operand = waitingOperand / operand;


      }
   }

}
-(double)performOperation:(NSString *) operation
{

    if ([operation isEqual:@"sqrt"])
    {
        operand = sqrt(operand);
    }
    else if([@"*+/-=" isEqual:operation])
    {
        [self performWaitingOperation];
        waitingOperation = operation;
        waitingOperand = operand;

 }
return operand;

}

@end
<code>
4

3 に答える 3

2

if([@"*+/-=" isEqual:operation]) キャッチに加えて、別のキャッチは次のとおりです。

if ([@"*" isEqual:waitingOperation])
    {
        operand = waitingOperand - operand;
    }
    else if ([@"-" isEqual:waitingOperation])
    {
        operand = waitingOperand * operand;
    }

ロジックが間違っています。

次に performWaitingOperation 関数をこれに変更し、

-(double) performWaitingOperation{

    if ([@"+" isEqual:waitingOperation])
    {
        return operand = waitingOperand + operand;
    }
    else if ([@"*" isEqual:waitingOperation])
    {
        return operand = waitingOperand * operand;
    }
    else if ([@"-" isEqual:waitingOperation])
    {
        return operand = waitingOperand - operand;
    }
    else if([@"/" isEqual:waitingOperation])
    {

        if (operand)
        {
            return operand = waitingOperand / operand;


      }
   }else if ([@"=" isEqual:waitingOperation]){
        return operand;
     }

}

変更する[self performWaitingOperation]; to operand = [self performWaitingOperation];

はじめに:電卓のチュートリアル

お役に立てれば..

于 2013-02-15T06:01:33.890 に答える
1

問題がある場合は、次のリンクを参照してください 。これにより、Calculator Brain プロジェクトがまとめて表示されます。

于 2013-02-15T04:31:05.547 に答える
1

ここはこの線だと思います。if([@" +/-=" isEqual:操作])。文字列「操作」が文字通り文字列「 +/- =」でない限り、それは決してtrueと評価されません。おそらく、代わりに、それぞれを個別に比較したいと思うでしょう。例 if([@"*" isEqual:operation] || [@"+" isEqual:operation] ... など

于 2013-02-15T04:19:21.080 に答える