0

私は Objective C を初めて使用します。2011 年から 12 年にかけて行われた iOS 開発に関するスタンフォードの講義をフォローしていました。割り当て 1 では、電卓に小数点を実装するよう求められます。これは私の実装がどのように見えるかです:

#import "CalculatorViewController.h"
#import "CalculatorBrain.h"

@interface CalculatorViewController()

@property (nonatomic) BOOL userIsInTheMiddleOfEnteringNumber;
@property (nonatomic,strong) CalculatorBrain *brain;
@property (nonatomic) int userPressedDecimalPoint;
@end

@implementation CalculatorViewController
@synthesize display = _display;
@synthesize userIsInTheMiddleOfEnteringNumber = _userIsInTheMiddleOfEnteringNumber;
@synthesize userPressedDecimalPoint = _userPressedDecimalPoint; 
@synthesize brain = _brain;


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

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

NSString *digit = sender.currentTitle;
if (digit == @"."){
    self.userIsInTheMiddleOfEnteringNumber = YES;
    self.userPressedDecimalPoint++;
}

if (self.userIsInTheMiddleOfEnteringNumber &&  self.userPressedDecimalPoint< 2){
    self.display.text = [self.display.text stringByAppendingString:digit];
    NSLog(@"decimal pressed: %d times",self.userPressedDecimalPoint);
} 
else{
    self.display.text = digit;
    self.userIsInTheMiddleOfEnteringNumber = YES;
    self.userPressedDecimalPoint = 1;
}
}

したがって、基本的に userPressedDecimalPoint プロパティを設定し、小数点が押されるたびにこのプロパティをカウンターとして使用しようとします。ただし、NSLogから、小数点を何回押しても、1回しか押されていないことがわかります。したがって、入力すると出力に複数の小数点が表示されます。任意の提案をいただければ幸いです。ありがとう!

修正されたコードの完全版:

#import "CalculatorViewController.h"
#import "CalculatorBrain.h"

@interface CalculatorViewController()

@property (nonatomic) BOOL userIsInTheMiddleOfEnteringNumber;
@property (nonatomic,strong) CalculatorBrain *brain;
@property (nonatomic) int userPressedDecimalPoint;
@end

@implementation CalculatorViewController
@synthesize display = _display;
@synthesize userIsInTheMiddleOfEnteringNumber = _userIsInTheMiddleOfEnteringNumber;
@synthesize userPressedDecimalPoint = _userPressedDecimalPoint;
@synthesize brain = _brain;


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

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

NSString *digit = sender.currentTitle;
if ([digit isEqualToString:@"."]){
    self.userIsInTheMiddleOfEnteringNumber = YES;
    self.userPressedDecimalPoint++;
}

if (self.userIsInTheMiddleOfEnteringNumber &&  self.userPressedDecimalPoint< 2){
    self.display.text = [self.display.text stringByAppendingString:digit];
   // NSLog(@"decimal pressed: %d times",self.userPressedDecimalPoint);
} 
else if (![digit isEqualToString:@"."]){
    self.display.text = digit;
    self.userIsInTheMiddleOfEnteringNumber = YES;
}
}

- (IBAction)operationPressed:(UIButton *)sender {
if (self.userIsInTheMiddleOfEnteringNumber) [self enterPressed];
double result = [self.brain performOperation:sender.currentTitle];
NSString *resultString = [NSString stringWithFormat:@"%g", result];
self.display.text = resultString;

}

- (IBAction)enterPressed {
self.userPressedDecimalPoint = 0;
[self.brain pushOperand:[self.display.text doubleValue]];
self.userIsInTheMiddleOfEnteringNumber = NO;
} 

@end
4

1 に答える 1

0

userIsInTheMiddleOfEnteringNumberに設定されるものがない限りNO、数値が 1 より大きい場合はいつでも、コードが実行self.userPressedDecimalPoint = 1;されて 1 に戻されます。

于 2012-07-29T15:20:40.060 に答える