接下来就是对+-*%的操作:
JsType(Char)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
从开始的时候我就先好了有一个方法分别处理+-*% 等到了真写到这里还有很多要考虑,
不知从那下手。不但要对这些字符输入的先后,各种情况要考虑:如
用户的输入:+;12++12; 12+12 *;12+12 * +;12+12 ++;12+12=;等这些情况;其他的情况因该不会再有了
所以要考虑每一种的流程,去验证,计算;
+
:如果先输入运算符,就因该排除 可以用result[0]=‘ ’应为还没存入其他字符;
12+12
:当我先输入运算符后再输入第二数时,考虑到可以再存入result[]方便;就又写一个方法Changeresult();吧result[]的值传给result2[] 在吧result[]清空接受第二值,在做求和运算方法SUM(TagType);考虑到12+12 *12运算符改变,先做前一个运算结果保存到result2[]内,我有用一个变量TagType保存运算符号
代码如下:
public static void JsType(char keychar)
{
if (result[0] == ' ') //
排除第一种情况先输运算符和连输两个运算符和计算前result有值
{
TagType = keychar;
}
else{
switch (keychar)
{
case
'+':case '-':case '*':case '%':case '/':
{
if (result2[0] == ' ')//
判断是否第一次开始计算 {
Changeresult();//
是就对result2赋值
TagType = keychar;//
}
else
{
SUM(TagType);//
开始计算:此时TagType保存的是上一次的运算符
TagType = keychar;//
保存这次运算符
}
break;
}
default:
{
break;
}
}
}
}
做好各个情况的验证 下一步就是开始计算 ,计算是需把result result2的内容转化位小数型
方法ChangCharTD(char rchar[] )此方法比较简单不在介绍
public
static double ChangCharTD(char[] rchar)
{string number1 = " ";double number=0;
for (int i = 0; i < 32; i++){if (rchar[i] != ' '){number1 += rchar[i]; }}
number = double .Parse(number1);
return number;
}
在做下面的方法时,只是为了实现加法,实现了之后。发现其他运算都相同,
public static void SUM(char typee )
{
double Sumresult=0.0;//
声明一个变量保存计算结果
if (typee == '+'){Sumresult = ChangCharTD(result) + ChangCharTD(result2);}
else if (typee == '-'){Sumresult = ChangCharTD(result2) - ChangCharTD(result);}
else if (typee == '*'){Sumresult = ChangCharTD(result) * ChangCharTD(result2);}
else if (typee == '/'){Sumresult = ChangCharTD(result2) / ChangCharTD(result);}
else if (typee == '%'){Sumresult = ChangCharTD(result2) % ChangCharTD(result);}
else
{
Sumresult = ChangCharTD(result2); //
次行是result无值的情况及连输运算符result2有值的情况,用及录上次运算的结果。
}
string a = "" + Sumresult;//
int j=0; //
记录保存到result2内有用字符的位数
foreach (char i in a)
将运算结果打散保存到result2中
{
result2[j] = i;//
j++;
}
for (int i = j+1; i <=31; i++)
{
if (typee == '%')//
为什么单单对
’
%
’
判断??应为在测试中当取余结果为零时多保存了‘0’字符;这样修改后问题解除
{
result2 [i-1]=' ';//
}
result2[i] = ' ';//
}
Showresult();//
显示结果
}
Showresult();
方法:
public static void Showresult()
{
message = "";
int j = 0;
for (int i = 31; i >=0; i--)
{
result[i] = ' ';//
将数组恢复
if (result2[i] == ' ')
{
message += " ";
}
else
{
j = i;
break;
}
}
for (int i = 0; i <= j; i++)
{
message += result2[i];
}
}
源码在附件上:
欢迎大家提出建议,对这个项目进行测试,有什么Bug请大家指出。共同改进。那个地方可以用更好更健康的解决方案虚心接受
……
转载于:https://blog.51cto.com/baixl/352063