第八课等于之集合对象的操作——C#计算器编程教学

26 篇文章 0 订阅
23 篇文章 0 订阅

在Cacl类中,添加集合字段:

IList<CaclList> caclLists = new List<CaclList>();
或者可以这样写,以保证对象不为空:
        private IList<CaclList> caclLists;
        private IList<CaclList> CaclLists
        {
            get
            {
                if (caclLists == null)
                {
                    caclLists = new List<CaclList>();
                }
                return caclLists;
            }

            set
            {
                if (caclLists != value)
                {
                    caclLists = value;
                }
            }
        }

接下来考虑的是如何把输入的东西添加到caclLists里了。这才是技术活。这里又要添加辅助变量了,你是在添加第几个分项式?
        private int i = 0;
这里还添加三个方法。
首先又要对CaclString每个字符进行判断,当然是少了前面EnterString方法中的功能方法,但是AddString给集合。我命名它为SwitchString方法,它调用两个方法,就是CaclList对象两个字段分别设值。一个我命名为AddString方法,一个为SetOp方法。通过这三个方法建立集合对象。
为什么这么做?想一下,刚才输入的保存在哪里?对象需要怎么输入数据?

问题来了,i++放在哪?
其实很好想,不就是在添加运算符之后吗?,又问,集合添加新CaclList对象放在哪?我又不知道会有几个分项式。

上代码:

        private void SwichString()
        {
            if (caclString.First() == '(')
            {
                caclString = caclString.Remove(0, 2);
            }
            for (int i = 0; i < CaclString.Length; i++)
            {
                string s = (CaclString.Substring(i, 1));
                switch (s)
                {
                    case "1":
                    case "2":
                    case "3":
                    case "4":
                    case "5":
                    case "6":
                    case "7":
                    case "8":
                    case "9":
                    case "0":
                    case ".":
                        AddString(s);
                        break;
                     case "÷":
                        SetOp(TypeOp.Divide);
                        break;
                    case "×":
                        SetOp(TypeOp.Multiply);
                        break;
                    case "-":
                        SetOp(TypeOp.Subtract);
                        break;
                    case "+":
                        SetOp(TypeOp.Add);
                        break;
                    case "%":
                        SetOp(TypeOp.Mod);
                        break;
                    case ")":
                        SetContrary();
                        break;
                    default:
                        break;
                }
            }
        }
        private void AddString(string str)
        {
            if (str == "." && haveDecimal)
                return;
            isOPAdded = false;
            noStringAdded = false;
            if (CaclLists.Count == i)
            {
                CaclLists.Add(new CaclList());
            }
            if (str == ".")
            {
                haveDecimal = true;
            }
            CaclLists[i].StringEnter += str;
        }
编写上面两上代码是最花费脑筋的,其实代码也不长,主要是必须考虑好我前提的问题该如何解决。
第八课结语。越到程序关键的部分,越要仔细多问几个问题,同时根据自己的思路写代码,然后不停测试,有疑问打断点。反正各种手段齐上。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落单枫叶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值