在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;
}
编写上面两上代码是最花费脑筋的,其实代码也不长,主要是必须考虑好我前提的问题该如何解决。
第八课结语。越到程序关键的部分,越要仔细多问几个问题,同时根据自己的思路写代码,然后不停测试,有疑问打断点。反正各种手段齐上。