📄 calceng.java
字号:
/////// CalcEng.java ///////
// 计算引擎对象,该对象提供计算能力并存储数据
class CalcEng
{
public CalcEng() { allClear(); } // 全部清除(初始化)
public boolean isError()
{ return statusFlag.equals(ERROR); }
public char getOpcode() // 返回其获取内部保留的运算符代码(+,*等)
{ return op; }
public double getOutput() // 返回其生成当前所存储的参数
{ return( argcnt==2 ? arg : ans ); }
public String keys() { return KEYS; } // operation keys
public byte precision() { return PREC; } //precision supported
public void operate(char nc) // nc is next opcode
{ switch( nc )
{ case 'A': allClear(); return; // 全部清除
case 'C': clear(); return; // 清除
case 'N': // 符号改变
if ( argcnt == 1 )
ans = -ans;
else arg = -arg;
return;
default : // +-*/=
compute();
op = nc; // new opcode
}
}
public void setOperand(double in) // 用于向计算引擎中输入数字数据
{ if ( op == '=' )
ans = in;
else
{ arg = in;
argcnt = 2;
}
}
public String status()
{ return statusFlag; } // 返回预定义的引擎状态字符串
protected void compute()
{ if ( argcnt == 2 )
{ switch( op )
{ case '+': ans += arg; break;
case '-': ans -= arg; break;
case '*': ans *= arg; break;
case '/': ans /= arg; break;
}
if (isError(ans)) statusFlag = ERROR;
argcnt = 1;
}
}
protected boolean isError(double n)
{ return Double.isInfinite(n) ||
Double.isNaN(n) ||
n > MAX_VALUE ||
n < -MAX_VALUE;
}
protected void allClear()
{ ans = arg = 0.0;
argcnt = 1; statusFlag = OK;
op = '=';
}
protected void clear()
{ if ( statusFlag.equals(ERROR) )
{ statusFlag = OK; ans = 0.0; }
else
{ if ( argcnt == 1 ) {ans = 0.0; op = '=';}
else { arg = 0.0; argcnt = 1;}
}
}
protected final String KEYS = "+-*/=NAC";
protected final byte PREC = 8; // 定义最大输入字符PREC
protected final double MAX_VALUE = 99999999;
protected final String ERROR = "E"; // error status
protected final String OK = ""; // normal status
protected double arg, ans; // arg(右操作数),ans(左操作数,也是计算的结果)
protected char op; // operation code
protected int argcnt; // argument count
protected String statusFlag = OK;
//测试CalcEng
/*public static void main(String[] args)
{ CalcEng cal = new CalcEng(); // instantiates object
cal.setOperand(9.8); // enters operand
cal.operate('+'); // enters opcode
cal.setOperand(1.2);
cal.operate('/');
cal.setOperand(2.0);
cal.operate('=');
System.out.println(cal.getOutput()); //displays answer
}*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -