📄 calceng.java
字号:
/////// CalcEng.java ///////
class CalcEng
{
// public members
public CalcEng() { allClear(); }
public String keys() { return KEYS; }
public byte precision() { return PREC; }
public char getOpcode() // returns current opcode
{ return op; }
public double getOutput() // returns current argument
{ return( argcnt==2 ? arg : ans ); }
public void operate(char nc) // nc is next opcode
{ switch( nc )
{ case 'A': allClear(); return; // All Clear
case 'C': clear(); return; // Clear
case 'N': // sign change
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 static void CalcInfo()
{
System.out.println("Please choose calculate mode:");
System.out.println("1.Basic mode");
System.out.println("2.Memory mode");
}
//former private method
protected void compute()
{ if ( argcnt == 2 )
{ switch( op )
{ case '+': ans += arg; break;
case '-': ans -= arg; break;
case '*': ans *= arg; break;
case '/': ans /= arg; break;
}
argcnt = 1;
}
isError(ans);
}
public String status()
{
return statusFlag;
}
public boolean isError()
{
if(statusFlag.equals(ERROR))
return true;
else
return false;
}
//former private method
protected void isError(double n)
{
if(Math.abs(n) > MAX_VALUE || Double.isInfinite(n) || Double.isNaN(n))
statusFlag = ERROR;
else
statusFlag = OK;
}
//former private method
protected void allClear()
{ ans = arg = 0.0;
argcnt = 1;
op = '=';
statusFlag = OK;
}
//former private method
protected void clear()
{
if ( argcnt == 1 )
{ ans = 0.0;
op = '=';
}
else
{ arg = 0.0;
argcnt = 1;
}
statusFlag = OK;
}
//former private members
private final String KEYS = "+-*/=NAC";
private final byte PREC = 8;
protected double ans, arg;
protected char op; // operation code
protected int argcnt; // argument count
protected final String OK = "";
protected final String ERROR = "E";
protected String statusFlag = OK;
protected final double MAX_VALUE = 99999999;
public static void main(String[] args)
{ CalcEng cal = new CalcEng();
cal.setOperand(9.8);
cal.operate('+');
cal.setOperand(1.2);
cal.operate('/');
cal.setOperand(2.0);
cal.operate('=');
System.out.println(cal.getOutput());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -