2017-05-06 9 views
0

私はXcode Objective-Cコースを受験しており、電卓を作る必要があります。誰かがゼロで分割しようとすると、例外を作成しなければならない部分を除いてすべてが機能します。私は私の人生のために働くことができないし、私が得続けるのは私の電卓のINFメッセージです。また、彼らはそれが@try @catchメソッドであることを望んでいるので、私の答えは見つからないので、私のGoogleの検索で自分自身で質問するようになっている。ここに私の完全なコードです。代わりに、設定のゼロ除算例外 - Objective-C

#import "Calculator.h" 

@interface ViewController() 

@end 

@implementation ViewController 
@synthesize numerator, denominator, total, operand, theNumber, lblText; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self setNumerator:0]; 
    [self setDenominator:0]; 
    [self setOperand:PLUS]; 
    [self setTotal:0.0]; 
    [self setTheNumber:@""]; 

    [self printNumber]; 
} 

-(void)printNumber 
{ 
    [lblText setText:theNumber]; 
} 

-(float)divideOp 
    { 
    float result=0; 
    @try { 
     if (self.denominator != 0) { 
      result = (self.numerator/self.denominator); 
     } else { 
      result = NAN; 
     } 
    } @catch (NSException *exception) { 
     // deal with the exception 
     NSLog(@"Can't divide by 0!"); 
    } 

    return result; 
} 

-(IBAction)calculate:(id)sender 
{ 
    denominator = [theNumber integerValue]; 

    if(operand == PLUS) 
     total = numerator + denominator; 
    else if(operand == MINUS) 
     total = numerator - denominator; 
    else if(operand == MULTIPLY) 
     total = numerator * denominator; 

    theNumber = [NSString stringWithFormat:@"%f",total]; 
    [self printNumber]; 

    numerator = 0; 
    denominator = 0; 
    total = 0.0; 
} 

-(void)saveNumerator 
{ 
    numerator = [theNumber integerValue]; 
    theNumber = @"0"; 
    [self printNumber]; 
} 

-(IBAction)clearNum:(id)sender 
{ 
    theNumber = @"0"; 
    [self printNumber]; 

} 
-(IBAction)setPlus:(id)sender 
{ 
    [self saveNumerator]; 
    operand = PLUS; 
} 

-(IBAction)setMinus:(id)sender 
{ 
    [self saveNumerator]; 
    operand = MINUS; 
} 

-(IBAction)setMultiply:(id)sender 
{ 
    [self saveNumerator]; 
    operand = MULTIPLY; 
} 

-(IBAction)setDivide:(id)sender 
{ 
    [self saveNumerator]; 
    operand = DIVIDE; 
} 

-(IBAction)press9:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"9"]; 
    [self printNumber]; 
} 

-(IBAction)press8:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"8"]; 
    [self printNumber]; 
} 

-(IBAction)press7:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"7"]; 
    [self printNumber]; 
} 

-(IBAction)press6:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"6"]; 
    [self printNumber]; 
} 

-(IBAction)press5:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"5"]; 
    [self printNumber]; 
} 

-(IBAction)press4:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"4"]; 
    [self printNumber]; 
} 

-(IBAction)press3:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"3"]; 
    [self printNumber]; 
} 

-(IBAction)press2:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"2"]; 
    [self printNumber]; 
} 

-(IBAction)press1:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"1"]; 
    [self printNumber]; 
} 

-(IBAction)press0:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"0"]; 
    [self printNumber]; 
} 

@end 
+0

関連コードを投稿してください。あなたが投稿したコードのほとんどはあなたの質問とは関係ありません。 – rmaddy

+0

古くなった '@ synthesize'を使って判断すると、もっと最新のチュートリアルを見つけることをお勧めします。 – rmaddy

答えて

0

あなたがゼロ除算
result = NAN; 

あなたべき

NSException *e = [NSException 
    exceptionWithName:@"Divide By Zero" 
    reason:@"Divide by Zero Exception" 
    userInfo:nil]; 
@throw e; 

どんなルーチンでそれをキャッチ... divideOp方法で例外をキャッチしないでください。計算の結果を印刷し、代わりにゼロ演算による不正な除算が試みられたことを表示します。

+0

だから、@catchが現在どこにあるのかを入れて、その全体をIBActionセクションに移動する必要がありますか?申し訳ありませんが、これは文字通り火曜日に開始されたこのクラスの最初の週ですので、divideOpメソッドで例外をキャッチしないことが意味することを理解するのは難しいです。 –