用控制台实现的计算器思路完成过程(二)
原创
©著作权归作者所有:来自51CTO博客作者baoxl的原创作品,请联系作者获取转载授权,否则将追究法律责任
接下来就是对+-*%的操作:
JsType(Char)
从开始的时候我就先好了有一个方法分别处理+-*% 等到了真写到这里还有很多要考虑,
不知从那下手。不但要对这些字符输入的先后,各种情况要考虑:如
用户的输入:+;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请大家指出。共同改进。那个地方可以用更好更健康的解决方案虚心接受……
下一篇:类的访问修饰符控制范围
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
控制台打印进度条
控制台打印进度条,实时展示任务进度。
进度条 System Java -
Java实现一个简单的计算器
Java编写一个简单的计算器。
System 运算符 字符串 -
Sentinel控制台显示异常解决方案
Sentinel控制台显示异常解决方案
spring 加载 前端资源 -
Python实现控制台计算器效果
我们今天来写一个简单计算器。
python 简单计算器 开发工具
















