作为一个新手,只好拿所有开发者都写的不想写又没有太大难度的计算器来下手咯。比较细一点,耐心哟。

我们都知道,计算器首要任务就是计算,那我们就直接看成A+B=C,来进行分析了。对A,B,C三个对象进行分析。

我们来想象一下真实计算器的操作,首先进行的就是输入了,那我们就先来解决输入问题:

----------键盘的输入

  1. 输入时我们得知道此次输入的值是A还是B,因为如果分不清是左值还是右值那就无法进行正确的赋值,那可想而之我们的计算器得成什么样。

但是用其他方法来实现这一辨别很显然很麻烦,这时候我们很容易想到同样有两个状态的BOOL基本类型。

@property (assign,nonatomic) BOOL isleftOrringt;//YES 为左值   NO为右值

BOOL声明之后我们拿到运算符的点击事件里边做状态的转换,这样就解决了,左右值赋值问题。

  2.同样因为我们的计算器在我们不操作的时候显示为“0”,所以我们不可能把零也带着显示,所以当为第一次输入时得进行清零操做。声明BOOL值判断(方便。哈哈)

//判断是否为第一次输入
@property (assign,nonatomic) BOOL isEduitfirst;//NO 为第一次写入 YES为不是第一次操作

  3.输入问题还有一个成员“.”,我们也得把它处理了  不能出来两次以上这个问题,我的解决方法是声明一个string赋值为“。”然后和lable上的值进行比较,要是有一个了就不让它输入了

    NSString *str = @".";//声明一个字符串与_lable值进行比较
    NSRange range;//声明一个range纪录相同字符串的长度
    range = [_lablenumber.text rangeOfString:str];
                //如果输入"."
                if ([sender.currentTitle isEqualToString:@"."] )
                {
                    //若"."的个数小于1个
                    if (range.length < 1) {
                        //stringByAppendingString  字符串的累加
                        _lablenumber.text = [_lablenumber.text stringByAppendingString:@"."];
                    }
                    else if(range.length > 1)
                    {
                        _lablenumber.text = _lablenumber.text;
                    }
                }
                else
                {
                    _lablenumber.text = [_lablenumber.text stringByAppendingString:sender.currentTitle];
                }

解决这个问题之后我们就算完成键盘操作Demo了

@property (weak, nonatomic) IBOutlet UILabel *lablenumber;//lable值
@property (strong,nonatomic) NSString *isleftNum;//左值
@property (strong,nonatomic) NSString *isringtNum;//右值
@property (strong,nonatomic) NSString *isresoult;//结果
- (IBAction)Eduit:(UIButton *)sender
{
    NSString *str = @".";//声明一个字符串与_lable值进行比较
    NSRange range;
    }
    //如果是左值
    if (_isleftOrringt)
    {
            if (_isEduitfirst)
                //如果不是第一次则字符串累加
            {
                //range获取_lablenumber.text中"."的个数
                range = [_lablenumber.text rangeOfString:str];
                //如果输入"."
                if ([sender.currentTitle isEqualToString:@"."] )
                {
                    //若"."的个数小于1个
                    if (range.length < 1) {
                        //stringByAppendingString  字符串的累加
                        _lablenumber.text = [_lablenumber.text stringByAppendingString:@"."];
                    }
                    else if(range.length > 1)
                    {
                        _lablenumber.text = _lablenumber.text;
                    }
                }
                else
                {
                    _lablenumber.text = [_lablenumber.text stringByAppendingString:sender.currentTitle];
                }
            }
        
            //如果是第一次操作,则清零
            else
            {
                //如果输入"."则lable上显示"0."
                if ([sender.currentTitle isEqualToString:@"."])
                {
                    _lablenumber.text = @"0.";
                }
                else
                {
                    _lablenumber.text = sender.currentTitle;
                }
                _isEduitfirst = YES;
        }
        //赋值给左值
        _isleftNum = _lablenumber.text;
    }
    else
    {
            if (_isEduitfirst)
                //如果不是第一次则字符串累加
            {
            range = [_lablenumber.text rangeOfString:str];
            if ([sender.currentTitle isEqualToString:@"."] )
            {
                if (range.length < 1) {
                    _lablenumber.text = [_lablenumber.text stringByAppendingString:@"."];
                }
                else if(range.length > 1)
                {
                    _lablenumber.text = _lablenumber.text;
                }
            }
            else
            {
                _lablenumber.text = [_lablenumber.text stringByAppendingString:sender.currentTitle];
            }
        }
            //如果是第一次操作,则清零
            else
            {
            if ([sender.currentTitle isEqualToString:@"."])
            {
                _lablenumber.text = @"0.";
                
            }
            else
            {
                _lablenumber.text = sender.currentTitle;
            }
            _isEduitfirst = YES;

        }
       _isringtNum = _lablenumber.text;
    }
    
    
    
    
}
- (IBAction)Eduit:(UIButton *)sender

相关文章:

  • 2021-10-15
  • 2021-05-29
  • 2021-12-02
  • 2021-12-02
  • 2021-11-21
猜你喜欢
  • 2022-12-23
  • 2021-11-05
相关资源
相似解决方案