📄 calcface.java
字号:
/////// CalcFace.java ///////
import java.io.*;
class CalcFace
{
public CalcFace(String k, byte pr)
{ keys = k; prec = ++pr;
nbuf = new StringBuilder(prec);
reset();
}
//null constructor
protected CalcFace() {}
public void setCalc(Calculator ca)
{ calc = ca; }
public void showNumber(String s)
{ System.out.println(prompt + s);
}
public void showStatus(String e)
{ prompt = ( e.length() == 0 )
? "Calc: "
: "Calc [" + e + "]: ";
}
public String errorEnable()
{
return ERROR_Str;
}
public void errorInput(String str)
{ errMode = true;
active = str;
}
public void showOp(char op) { }
public void input() throws IOException
{ int i;
while ( (i= inchar()) != -1 )
{ enter((char) i); }
}
//former private method
protected void enter(char c)
{
if ( errMode )
{ if ( active.indexOf(c) == -1) return;
else errMode = false;
}
if ( keys.indexOf(c) != -1 ) // if c an operator
{ showOp(c);
if ( num )
calc.enterNumber(extractNumber(), c);
else
calc.enterOp(c);
reset();
}
else if ( nump(c) && nbuf.length() < prec )
{ num = true;
buildNumber(c);
}
}
//former private method
protected boolean nump(char c)
{ return( c == '.' || Character.isDigit(c) ); }
protected String extractNumber()
{ return (nbuf.length() == 0) ? "0"
: nbuf.toString();
}
//former private method
protected void buildNumber(char c)
{ int i = nbuf.length();
if ( i == 0 && c == '0') return; // ignore leading zeros
if ( c == '.' ) // at most one decimal point
{ if ( ! before_point ) return;
else before_point = false;
}
nbuf.append(c);
}
//former private method
protected void reset()
{ before_point = true;
nbuf.setLength(0);
num = false;
}
//former private method
protected int inchar()
throws IOException
{ return System.in.read(); }
//former private members
protected String active;
protected boolean errMode;
protected final String ERROR_Str = "AC";
protected String prompt="Calc: ";
protected Calculator calc;
protected String keys; // keys recognized
protected StringBuilder nbuf; // buffer for input number
protected byte prec; // max no of chars displayable
protected boolean before_point = true;
protected boolean num = false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -