⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calceng.java

📁 本“计算器”可以完成任意的通常借助手持计算器来完成的标准运算。“计算器”可用于基本的算术运算
💻 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 + -