2012-07-29 3 views
0

나는 Objective C가 처음이다. 나는 스탠포드 강의에서 2011-12 가을 iOS 개발을 따랐으며 과제 1에서는 계산기에 소수점을 구현하도록 요청했다. 그래서 기본적으로 내가 설정 속성 userPressedDecimalPoint이 있고 난 카운터로 소수점 누를 때마다이 속성을 사용하려고Objective C에서 속성을 카운트로 사용하기

#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; 
} 
} 

: 이것은 내 구현 모습입니다. 그러나 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 

답변

0

userIsInTheMiddleOfEnteringNumberNO에 설정 무언가가없는 한, 언제든지 수가 1보다 큰 경우, self.userPressedDecimalPoint = 1;을 실행하고 하나를 다시 설정합니다 코드.

+0

OK self.userPressedDecimalPoint = 1 줄을 제거했을 때 NSLog 출력이 소수점을 몇 번이나 눌러도 0을 보여줍니다. – stud91

+1

또한 문자열을 비교할 때'=='를 사용하면 안됩니다. 'isEqualToString :'을 대신 사용해보십시오. ('=='는 주소가 아닌 내용을 비교합니다.) 디버거에서 메서드를 단계별로 실행하여 원하는 위치로 이동하는지 확인합니다. –

+0

감사합니다. 지금은 잘 작동합니다. – stud91