Hi people, I'm trying to write a basic calculator using GNUstep+ObjC and I get
stucked. I really don't know where is the problem in my code. May you help me?
I'm sending here what I have implemented until now:
@interface UCalc : NSObject
{
char operation; //just a char to validate the operation
id number1, number2; //number1 = the current button pressed, number2 = the old
number
id result; //the calculator display
}
- (void) Add: (id)sender;
@end
@implementation UCalc
- (void) Add: (id)sender
{
operation = '+';
number2 = number1; //when you press the add button the current number becomes
the old number
number1 = @"0";
}
- (void) Button0: (id)sender
{
number1 = @"0";
[result setStringValue: number1];
}
- (void) Button1: (id)sender
{
//if there is no number yet
if (number1 == nil || [number1 isEqual: @"0"]){
[result setStringValue: @""];
number1 = @"1";
}
//else append the current number in itself, so we can get number > 9
else{
number1 = [number1 stringByAppendingFormat: @"1"];
}
[result setStringValue: number1];
}
- (void) Button2: (id)sender
{
if (number1 == nil || [number1 isEqual: @"0"]){
[result setStringValue: @""];
number1 = @"2";
}
else{
number1 = [number1 stringByAppendingFormat: @"2"];
}
[result setStringValue: number1];
}
All the others number buttons are implemented in the same way...
The problem is in Equal button:
- (void) Equal: (id)sender{
switch(operation){
case '+':
//trying to do this: number1 = number2 + number1 and then print in the display
result
[number1 setDoubleValue: [number2 doubleValue] + [number1 doubleValue]];
[result setStringValue: number1];
break;
}
}
I already have created the window in Gorm, so everything is implemented there.
The problem in this code is in the number1 = number2 + number1 in Equal method,
I don't know why it's not assigning to number1 the operation correctly and then
result working correctly. Any idea about what I'm doing wrong? Everything?
Sorry my english. Thanks./* All Rights reserved */
#include <AppKit/AppKit.h>
@interface UCalc : NSObject
{
char operation;
id number1, number2;
id result;
}
- (void) Add: (id)sender;
- (void) Button0: (id)sender;
- (void) Button1: (id)sender;
- (void) Button2: (id)sender;
- (void) Button3: (id)sender;
- (void) Button4: (id)sender;
- (void) Button5: (id)sender;
- (void) Button6: (id)sender;
- (void) Button7: (id)sender;
- (void) Button8: (id)sender;
- (void) Button9: (id)sender;
- (void) Clear: (id)sender;
- (void) Div: (id)sender;
- (void) Dot: (id)sender;
- (void) Equal: (id)sender;
- (void) Mul: (id)sender;
- (void) Percent: (id)sender;
- (void) Sub: (id)sender;
- (void) Reverse: (id)sender;
@end
/* All Rights reserved */
#include <AppKit/AppKit.h>
#include "UCalc.h"
@implementation UCalc
- (void) Add: (id)sender
{
operation = '+';
number2 = number1;
number1 = @"0";
}
- (void) Button0: (id)sender
{
number1 = @"0";
[result setStringValue: number1];
}
- (void) Button1: (id)sender
{
if (number1 == nil || [number1 isEqual: @"0"]){
[result setStringValue: @""];
number1 = @"1";
}
else{
number1 = [number1 stringByAppendingFormat: @"1"];
}
[result setStringValue: number1];
}
- (void) Button2: (id)sender
{
if (number1 == nil || [number1 isEqual: @"0"]){
[result setStringValue: @""];
number1 = @"2";
}
else{
number1 = [number1 stringByAppendingFormat: @"2"];
}
[result setStringValue: number1];
}
- (void) Button3: (id)sender
{
if (number1 == nil || [number1 isEqual: @"0"]){
[result setStringValue: @""];
number1 = @"3";
}
else{
number1 = [number1 stringByAppendingFormat: @"3"];
}
[result setStringValue: number1];
}
- (void) Button4: (id)sender
{
if (number1 == nil || [number1 isEqual: @"0"]){
number1 = @"4";
}
else{
number1 = [number1 stringByAppendingFormat: @"4"];
}
[result setStringValue: number1];
}
- (void) Button5: (id)sender
{
if (number1 == nil || [number1 isEqual: @"0"]){
number1 = @"5";
}
else{
number1 = [number1 stringByAppendingFormat: @"5"];
}
[result setStringValue: number1];
}
- (void) Button6: (id)sender
{
if (number1 == nil || [number1 isEqual: @"0"]){
number1 = @"6";
}
else{
number1 = [number1 stringByAppendingFormat: @"6"];
}
[result setStringValue: number1];
}
- (void) Button7: (id)sender
{
if (number1 == nil || [number1 isEqual: @"0"]){
number1 = @"7";
}
else{
number1 = [number1 stringByAppendingFormat: @"7"];
}
[result setStringValue: number1];
}
- (void) Button8: (id)sender
{
if (number1 == nil || [number1 isEqual: @"0"]){
number1 = @"8";
}
else{
number1 = [number1 stringByAppendingFormat: @"8"];
}
[result setStringValue: number1];
}
- (void) Button9: (id)sender
{
if (number1 == nil || [number1 isEqual: @"0"]){
number1 = @"9";
}
else{
number1 = [number1 stringByAppendingFormat: @"9"];
}
[result setStringValue: number1];
}
- (void) Clear: (id)sender
{
[result setStringValue: @""];
number1 = number2 = @"0";
}
- (void) Div: (id)sender
{
//operation = '/';
//number2 = number1;
}
- (void) Dot: (id)sender
{
/* insert your code here */
}
- (void) Equal: (id)sender{
switch(operation){
case '+':
[number1 setDoubleValue: [number2 doubleValue] + [number1 doubleValue]];
[result setStringValue: number1];
break;
/* case '-':
[result setDoubleValue: number2 - number1];
[number1 setDoubleValue: [result doubleValue]];
break;
case '*':
[result setDoubleValue: number2 * number1];
[number1 setDoubleValue: [result doubleValue]];
break;
case '/':
[result setDoubleValue: number2 / number1];
[number1 setDoubleValue: [result doubleValue]];
break;*/
}
}
- (void) Mul: (id)sender
{
//operation = '*';
//[number1 setDoublevalue: [result doubleValue]];
}
- (void) Percent: (id)sender
{
//number1 = number1/100;
//[result setDoubleValue: [number1 doubleValue];
}
- (void) Sub: (id)sender
{
//operation = '-';
//[number1 setDoubleValue: [result doubleValue]];
}
- (void) Reverse: (id)sender
{
//[number1 setDoubleValue: [result doubleValue] * (-1)];
//[result setStringValue: [number1 stringValue]];
}
@end_______________________________________________
Discuss-gnustep mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnustep