package com.open.jiSuanQi;
public class Calservice {
// 存储器,m默认为0,用于保存需要暂时保存的计算结果
private double store = 0;
// 第一、二个操作数
private String firstNum = null;
private String secondNum=null;
// 去保存计算符号或者其他符号
private String lastOp = null;
// 是否为第二个操作数,如果是,点击数字键时,则在文本框中重新输入
private boolean isSecondNum = false;
// 数字
private String numString = "0123456789";
// 四则运算
private String opString = "+-*/";
/*
* 在用户输入数字的时候(包括“0123456789.”) 首先判断是第一个操作数还是第二个,如果是第一个 就把用户新输入的数字追加到原来数字的后面
* 并做为结果返回;如果是第二个,直接返回结果,并把isSecondNum标志为false 用户继续输入数字的时候,就把数字追加到原来数字的后面做为结果返回
*/
public String catNum(String cmd,String text) {
String result=cmd;
// 如果目前的的Text不等于0
if (!text.equals("0")) {
if(isSecondNum) {
// 将isSecondNum标志为false
isSecondNum=false;
}else {
// 刚返回的结果为目前的text加上新点击的数字
result=text+cmd;
}
}
if (result.indexOf(".")==0) {
result="0"+result;
}
return result;
}
/* 当用户点击“+- ”(四则运算)的时候,就把lastOp设置为其中一个符号,
* 这个变量用来记录用户正要进行计算的类型 */
public String setOp(String cmd,String text) {
// 将此操作符设置为上次的操作
this.lastOp=cmd;
// 设置第一个操作数的值
this.firstNum=text;
// 将第二个操作数赋值为空
this.secondNum=null;
// 将isSecondNum标志为true,下次为第二个操作数
this.isSecondNum=true;
// 返回空值
return null;
}
// s算出最后的结果
public String cal(String text,boolean isPercent) throws Exception{
// 初始化第二个操作数
double secondResult=secondNum==null?Double.valueOf(text).doubleValue():
Double.valueOf(secondNum).doubleValue();
// 如果除数为0,不处理
if (secondResult==0&&this.lastOp.equals("/")) {
return "0";
}
// 如果有"%"操作,则第二个操作数等于两数相乘再除以100
if(isPercent) {
secondResult=Math_1cp.multiply(Double.valueOf(firstNum),
Math_1cp.divide(secondResult, 100));
}
// 四则运算,返回结果赋给第一个操作数,输入的是String,所以要Double.valueOf()
// 转为double类型
if (this.lastOp.equals("+")) {
firstNum=String.valueOf(Math_1cp.add(Double.valueOf(firstNum),
secondResult));
}
else if(this.lastOp.equals("-")) {
firstNum=String.valueOf(Math_1cp.subtract(Double.valueOf(firstNum),
secondResult));
}
else if(this.lastOp.equals("*")) {
firstNum=String.valueOf(Math_1cp.multiply(Double.valueOf(firstNum),
secondResult));
}
else if(this.lastOp.equals("/")) {
firstNum=String.valueOf(Math_1cp.divide(Double.valueOf(firstNum),
secondResult));
}
// 给第二个操作数重新赋值
secondNum=secondNum==null?text:secondNum;
this.isSecondNum=true;
return firstNum;
}
// 存储操作
// 定义一个double类型的属性store来充当存储器
public String mCmd(String cmd,String text) {
if (cmd.equals("M+")) {
// 如果是"M+"操作,把计算的结果累积到store中
store=Math_1cp.add(store, Double.valueOf(text));
}else if(cmd.equals("MC")) {
// 清除store
store=0;
}else if(cmd.equals("MR")) {
isSecondNum=true;
// 则把store的值读出来
return String.valueOf(store);
}else if(cmd.equals("MS")) {
// 将计算结果保存在store
store=Double.valueOf(text).doubleValue();
}
return null;
}
// 实现开方、倒数
public String sqrt(String text) {
// 将isSecondNum标志为true
this .isSecondNum=true;
return String.valueOf(Math.sqrt(Double.valueOf(text)));
}
public String setReciprocal(String text) {
// 如果text为0,则不求倒数
if (text.equals("0")) {
return text;
}else {
// 将isSecondNum标志为true
this.isSecondNum=true;
return String.valueOf(Math_1cp.divide(1,Double.valueOf(text)));
}
}
// 实现倒退操作
// 使用subString方法
public String backSpace(String text) {
// 不包括text.length()-1
return text.equals("0")||text.equals("")?"0":
text.substring(0,text.length()-1);
}
// 实现清除计算结果
public String ClearAll() {
// 将第一第二操作数恢复为默认值
this.firstNum=null;
this.secondNum=null;
return firstNum;
}
// 实现正负转换
public String setNegative(String text) {
if (text.indexOf("-")==0) {
return text.substring(1, text.length());
}
return text.equals("0")?text:"-"+text;
}
// 清除上一次结果
public String clear(String text) {
return "0";
}
// 返回存储器结果
public double getStore() {
return this.store;
}
// 实现中转方法
public String callMethod(String cmd,String text ) throws Exception{
if (cmd.equals("C")) {
return ClearAll();
}else if(cmd.equals("CE")) {
return clear(text);
}else if(cmd.equals("Back")) {
return backSpace(text);
}else if(numString.indexOf(cmd)!=-1) {
return catNum(cmd,text);
}else if(opString.indexOf(cmd)!=-1) {
return setOp(cmd,text);
}else if(cmd.equals("=")) {
return cal(text,false);
}else if(cmd.equals("+/-")) {
return setNegative(text);
}else if (cmd.equals("1/x")) {
return setReciprocal(text);
}else if (cmd.equals("sqrt")) {
return sqrt(text);
}else if (cmd.equals("%")) {
return cal(text,true);
}else {
return mCmd(cmd,text);
}
}
}
jiSuanQi.rar_captain1pn_弹球游戏
版权申诉
43 浏览量
2022-09-25
00:09:37
上传
评论
收藏 4KB RAR 举报
寒泊
- 粉丝: 74
- 资源: 1万+
最新资源
- # 微信小程序-健康菜谱 基于微信小程序的一个查找检索菜谱的应用 ### 效果 !动态图(./res/gif/demo
- zabbix-get命令包资源
- 毕业设计,基于PyQt5实现的可视化界面的Python车牌自动识别系统源码
- 26-朴素贝叶斯分类.rar
- 没有安Matlab 也可以 生成FIR抽头系数工具.py
- python烟花代码.rar
- 实验目的: 1.构建基于verilog语言的组合逻辑电路和时序逻辑电路; 2.掌握verilog语言的电路设计技巧 3.完成如
- 扩展卡尔曼滤波matlab仿真
- 3_base.apk.1
- 躺赢者PRO飞控常见典型问题合集(续一)无名小哥 余义 20240501待修
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈