我刚刚在Objective-C中开始了我的旅程,我尝试做的第一个应用程序是完全可操作的基本计算器。
哈文是这么说的。当输入两个输入,然后按下等于按钮时,我已经完成了加法、减法、乘法和除法的运算。但现在是+/-操作和百分比%。我希望它们是自我运作的。
怎么了?好吧,我希望它们能像在运行iOS7计算器的iPhone中一样工作,当你输入一个数字,然后按下+/-或百分比时,输出会立即显示为结果,而无需输入另一个数字并按下等号。
我试着按照我一直使用的方法操作,但我必须按两次按钮才能显示,这不是我想要的。。
这是我的密码。。
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
-(IBAction)Number1:(id)sender{
SelectNumber = SelectNumber * 10;
SelectNumber = SelectNumber + 1;
Screen.text = [NSString stringWithFormat:@"%i", SelectNumber];
}
-(IBAction)Number2:(id)sender{
SelectNumber = SelectNumber * 10;
SelectNumber = SelectNumber + 2;
Screen.text = [NSString stringWithFormat:@"%i", SelectNumber];
}
-(IBAction)Number3:(id)sender{
SelectNumber = SelectNumber * 10;
SelectNumber = SelectNumber + 3;
Screen.text = [NSString stringWithFormat:@"%i", SelectNumber];
}
-(IBAction)Number4:(id)sender{
SelectNumber = SelectNumber * 10;
SelectNumber = SelectNumber + 4;
Screen.text = [NSString stringWithFormat:@"%i", SelectNumber];
}
-(IBAction)Number5:(id)sender{
SelectNumber = SelectNumber * 10;
SelectNumber = SelectNumber + 5;
Screen.text = [NSString stringWithFormat:@"%i", SelectNumber];
}
-(IBAction)Number6:(id)sender{
SelectNumber = SelectNumber * 10;
SelectNumber = SelectNumber + 6;
Screen.text = [NSString stringWithFormat:@"%i", SelectNumber];
}
-(IBAction)Number7:(id)sender{
SelectNumber = SelectNumber * 10;
SelectNumber = SelectNumber + 7;
Screen.text = [NSString stringWithFormat:@"%i", SelectNumber];
}
-(IBAction)Number8:(id)sender{
SelectNumber = SelectNumber * 10;
SelectNumber = SelectNumber + 8;
Screen.text = [NSString stringWithFormat:@"%i", SelectNumber];
}
-(IBAction)Number9:(id)sender{
SelectNumber = SelectNumber * 10;
SelectNumber = SelectNumber + 9;
Screen.text = [NSString stringWithFormat:@"%i", SelectNumber];
}
-(IBAction)Number0:(id)sender{
SelectNumber = SelectNumber * 10;
SelectNumber = SelectNumber + 0;
Screen.text = [NSString stringWithFormat:@"%i", SelectNumber];
}
-(IBAction)Times:(id)sender{
if (RunningTotal == 0) {
RunningTotal = SelectNumber;
} else{
switch (Method) {
case 1:
RunningTotal = RunningTotal * SelectNumber;
break;
case 2:
RunningTotal = RunningTotal / SelectNumber;
break;
case 3:
RunningTotal = RunningTotal - SelectNumber;
break;
case 4:
RunningTotal = RunningTotal + SelectNumber;
break;
case 5:
RunningTotal = RunningTotal / 100;
break;
case 6:
if(RunningTotal > 0){
RunningTotal = RunningTotal * -1;
} else{
RunningTotal = RunningTotal * +1;
}
break;
default:
break;
}
}
Method = 1;
SelectNumber = 0;
}
-(IBAction)Divide:(id)sender{
if (RunningTotal == 0) {
RunningTotal = SelectNumber;
} else{
switch (Method) {
case 1:
RunningTotal = RunningTotal * SelectNumber;
break;
case 2:
RunningTotal = RunningTotal / SelectNumber;
break;
case 3:
RunningTotal = RunningTotal - SelectNumber;
break;
case 4:
RunningTotal = RunningTotal + SelectNumber;
break;
case 5:
RunningTotal = RunningTotal / 100;
break;
case 6:
if(RunningTotal > 0){
RunningTotal = RunningTotal * -1;
} else{
RunningTotal = RunningTotal * +1;
}
break;
default:
break;
}
}
Method = 2;
SelectNumber = 0;
}
-(IBAction)Substract:(id)sender{
if (RunningTotal == 0) {
RunningTotal = SelectNumber;
} else{
switch (Method) {
case 1:
RunningTotal = RunningTotal * SelectNumber;
break;
case 2:
RunningTotal = RunningTotal / SelectNumber;
break;
case 3:
RunningTotal = RunningTotal - SelectNumber;
break;
case 4:
RunningTotal = RunningTotal + SelectNumber;
break;
case 5:
RunningTotal = RunningTotal / 100;
break;
case 6:
if(RunningTotal > 0){
RunningTotal = RunningTotal * -1;
} else{
RunningTotal = RunningTotal * +1;
}
break;
default:
break;
}
}
Method = 3;
SelectNumber = 0;
}
-(IBAction)Plus:(id)sender{
if (RunningTotal == 0) {
RunningTotal = SelectNumber;
} else{
switch (Method) {
case 1:
RunningTotal = RunningTotal * SelectNumber;
break;
case 2:
RunningTotal = RunningTotal / SelectNumber;
break;
case 3:
RunningTotal = RunningTotal - SelectNumber;
break;
case 4:
RunningTotal = RunningTotal + SelectNumber;
break;
case 5:
RunningTotal = RunningTotal / 100;
break;
case 6:
if(RunningTotal > 0){
RunningTotal = RunningTotal * -1;
} else{
RunningTotal = RunningTotal * +1;
}
break;
default:
break;
}
}
Method = 4;
SelectNumber = 0;
}
- (IBAction)Percent:(id)sender {
if (RunningTotal == 0) {
RunningTotal = SelectNumber;
} else{
switch (Method) {
case 1:
RunningTotal = RunningTotal * SelectNumber;
break;
case 2:
RunningTotal = RunningTotal / SelectNumber;
break;
case 3:
RunningTotal = RunningTotal - SelectNumber;
break;
case 4:
RunningTotal = RunningTotal + SelectNumber;
break;
case 5:
RunningTotal = RunningTotal / 100;
break;
case 6:
if(RunningTotal > 0){
RunningTotal = RunningTotal * -1;
} else{
RunningTotal = RunningTotal * +1;
}
break;
default:
break;
}
}
Method = 5;
SelectNumber = 0;
Screen.text = [NSString stringWithFormat:@"%.2f", RunningTotal];
}
- (IBAction)PositiveOrNegative:(id)sender {
if (RunningTotal == 0) {
RunningTotal = SelectNumber;
} else{
switch (Method) {
case 1:
RunningTotal = RunningTotal * SelectNumber;
break;
case 2:
RunningTotal = RunningTotal / SelectNumber;
break;
case 3:
RunningTotal = RunningTotal - SelectNumber;
break;
case 4:
RunningTotal = RunningTotal + SelectNumber;
break;
case 5:
RunningTotal = RunningTotal / 100;
break;
case 6:
if(RunningTotal > 0){
RunningTotal = RunningTotal * -1;
} else{
RunningTotal = RunningTotal * +1;
}
break;
default:
break;
}
}
Method = 6;
SelectNumber = 0;
Screen.text = [NSString stringWithFormat:@"%.2f", RunningTotal];
}
- (IBAction)Dot:(id)sender {
}
-(IBAction)Equals:(id)sender{
if (RunningTotal == 0) {
RunningTotal = SelectNumber;
} else{
switch (Method) {
case 1:
RunningTotal = RunningTotal * SelectNumber;
break;
case 2:
RunningTotal = RunningTotal / SelectNumber;
break;
case 3:
RunningTotal = RunningTotal - SelectNumber;
break;
case 4:
RunningTotal = RunningTotal + SelectNumber;
break;
case 5:
RunningTotal = RunningTotal / 100;
break;
default:
break;
}
}
Method = 0;
SelectNumber = 0;
Screen.text = [NSString stringWithFormat:@"%.2f", RunningTotal];
}
-(IBAction)AllClear:(id)sender{
Method = 0;
RunningTotal = 0;
SelectNumber = 0;
Screen.text = [NSString stringWithFormat:@"0"];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
好吧,任何帮助或建议都非常感谢。如果你需要更多关于我的帖子的信息或任何可能有助于更好地理解我的问题的问题,请告诉我,我会提供。:)
这看起来可疑地像一个错误:
case 6:
if(RunningTotal > 0){
RunningTotal = RunningTotal * -1;
} else{
RunningTotal = RunningTotal * +1;
}
我想你永远都不想乘以+1。。。要翻转负数的符号,还需要乘以-1
我还建议将方法上的重复开关封装在一个函数中。
此外,Objective-C还有一些其他不受欢迎的地方……您应该使用setter和getter来修改实例变量。您应该使用@property为您创建iVars和访问者。iVars和函数应该以小写字母开头,而类则以大写字母开头。ViewController类应该具有特定于函数的名称。ViewController类应该有一个自己的前缀,因为Objective C不支持名称空间。