📄 calculator.java
字号:
}
else
{ MainFrame.text.setText(" "+approximation(MainFrame.answear));
MainFrame.computable=true;
}
}
else if((e.getSource()==MainFrame.rbutton[2])&&(MainFrame.computable))//如果是“sqrt”
{ MainFrame.ysf="sqrt";
comput(Double.parseDouble(MainFrame.text.getText()));
MainFrame.ysf="=";
MainFrame.start=true;
if(MainFrame.error1) { MainFrame.text.setText("函数输入无效");
MainFrame.computable=false;
MainFrame.error1=false;
}
else
{ MainFrame.text.setText(" "+approximation(MainFrame.answear));
MainFrame.computable=true;
}
}
else if((e.getSource()==MainFrame.rbutton[6])&&(MainFrame.computable))//如果是“x^y”
{ comput(Double.parseDouble(MainFrame.text.getText()));
MainFrame.ysf="x^y";
MainFrame.start=true;
if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
MainFrame.computable=false;
MainFrame.error=false;
}
else if(MainFrame.error2)
{ MainFrame.text.setText("数据过大,造成溢出");
MainFrame.computable=false;
MainFrame.error2=false;
}
else
{ MainFrame.text.setText(" "+approximation(MainFrame.answear));
MainFrame.computable=true;
}
}
else if((e.getSource()==MainFrame.rbutton[3])&&(MainFrame.computable))//如果是“ln”
{ MainFrame.ysf="ln";
comput(Double.parseDouble(MainFrame.text.getText()));
MainFrame.ysf="=";
MainFrame.start=true;
if(MainFrame.error1) { MainFrame.text.setText("函数输入无效");
MainFrame.computable=false;
MainFrame.error1=false;
}
else
{ MainFrame.text.setText(" "+approximation(MainFrame.answear));
MainFrame.computable=true;
}
}
else if((e.getSource()==MainFrame.rbutton[7])&&(MainFrame.computable))//如果是“%”
{ comput(Double.parseDouble(MainFrame.text.getText()));
MainFrame.ysf="%";
MainFrame.start=true;
if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
MainFrame.computable=false;
MainFrame.error=false;
}
else
{ MainFrame.text.setText(" "+MainFrame.answear);
MainFrame.computable=true;
}
}
else if((e.getSource()==MainFrame.rbutton[11])&&(MainFrame.computable))//如果是1/x
{ MainFrame.ysf="1/x";
comput(Double.parseDouble(MainFrame.text.getText()));
MainFrame.ysf="=";
MainFrame.start=true;
if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
MainFrame.computable=false;
MainFrame.error=false;
}
else
{ MainFrame.text.setText(" "+approximation(MainFrame.answear));
MainFrame.computable=true;
}
}
else if((e.getSource()==MainFrame.rbutton[15])&&(MainFrame.computable))//如果是“=”
{ comput(Double.parseDouble(MainFrame.text.getText()));
MainFrame.ysf="=";
MainFrame.start=true;
MainFrame.point=false;
MainFrame.fnumber=false;
if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
MainFrame.computable=false;
MainFrame.error=false;
}
else if(MainFrame.error2)
{ MainFrame.text.setText("数据过大,造成溢出");
MainFrame.computable=false;
MainFrame.error2=false;
}
else { MainFrame.text.setText(" "+approximation(MainFrame.answear));
MainFrame.computable=true;
}
}
else if(e.getSource()==MainFrame.rbutton[14])//如果是“CE”,则所有的标志回到初始状态
{ MainFrame.start=true;
MainFrame.text.setText("0");
MainFrame.ysf="=";
MainFrame.point=false;
MainFrame.answear=0;
MainFrame.fnumber=false;
MainFrame.negtive=false;
MainFrame.error=false;
MainFrame.error1=false;
}
else if((e.getSource()==MainFrame.rbutton[13])&&(MainFrame.computable))//如果是退格键
{ a=MainFrame.text.getText();
if(a.length()>1)
{ a = MainFrame.text.getText().substring(0, MainFrame.text.getText().length()-1);
MainFrame.text.setText(a);
}
else { MainFrame.text.setText("0");
MainFrame.start=true;
a="0";//防止a的长度为0而使退格键失效
}
}
}
public double nexponent(double n)//求x的y次方
{ double m=1;
for(int i=0;i<n;i++)
{ m*=MainFrame.answear;
if((Double.MAX_VALUE/m)<(m))
{ MainFrame.error2=true;
return 0;
}
}
return m;
}
public double approximation(double x)//四舍五入取5位小数
{ int m;
int n;
x*=1000000;
m=(int)x;
n=m%10;
if(n>=5) { m=m/10+1; }
else m=m/10;
x=m;
x/=100000;
return x;
}
public void comput(double n)//计算,并将结果返回
{ if(MainFrame.ysf.equals("+")) { MainFrame.answear+=n; }
if(MainFrame.ysf.equals("-")) { MainFrame.answear-=n; }
if(MainFrame.ysf.equals("*")) { MainFrame.answear*=n; }
if(MainFrame.ysf.equals("/")) { if(n==0) { MainFrame.error=true; }
else
MainFrame.answear/=n; }
if(MainFrame.ysf.equals("=")) { MainFrame.answear=n; }
if(MainFrame.ysf.equals("sin")) { MainFrame.answear=Math.sin(Math.toRadians(n)); }
if(MainFrame.ysf.equals("cos")) { MainFrame.answear=Math.cos(Math.toRadians(n)); }
if(MainFrame.ysf.equals("tan")) { if(((int)n%90)==0&&((int)n%180!=0)) { MainFrame.error1=true; }
else MainFrame.answear=Math.tan(Math.toRadians(n)); }
if(MainFrame.ysf.equals("cot")) { if(((int)n%90)==0&&((int)n%180!=0)) { MainFrame.error1=true; }
else MainFrame.answear=1/Math.tan(Math.toRadians(n)); }
if(MainFrame.ysf.equals("x^y")) { MainFrame.answear=nexponent(n); }
if(MainFrame.ysf.equals("sqrt")) { if(n<0) { MainFrame.error1=true; }
else MainFrame.answear=Math.sqrt(n); }
if(MainFrame.ysf.equals("1/x")) { if(n==0) { MainFrame.error=true; }
else MainFrame.answear=1/n; }
if(MainFrame.ysf.equals("ln")) { if(n<=0) { MainFrame.error1=true; }
else MainFrame.answear=Math.log(n); }
if(MainFrame.ysf.equals("%")) { if(n==0) { MainFrame.error=true; }
else MainFrame.answear=(int)MainFrame.answear%(int)n; }
}
public void keyTyped(KeyEvent e)//键盘事件处理
{ char s=e.getKeyChar();
if(('0'<s)&&(s<='9')) //如果是1-9数字键
{ if(MainFrame.start)
{ MainFrame.text.setText(""+s);
MainFrame.fnumber=true;
}
else { MainFrame.text.setText(MainFrame.text.getText()+s);
MainFrame.fnumber=true;
}
MainFrame.start=false;
MainFrame.computable=true;
}
else if(s=='0')//如果是数字键0
{ if(MainFrame.fnumber) MainFrame.text.setText(MainFrame.text.getText()+s);
if(MainFrame.start) { MainFrame.text.setText("0");}
MainFrame.computable=true;
}
else if((s=='+')&&(MainFrame.computable))//如果是“+”
{ comput(Double.parseDouble(MainFrame.text.getText()));
MainFrame.ysf="+";
MainFrame.start=true;
MainFrame.point=false;
MainFrame.fnumber=false;
if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
MainFrame.computable=false;
MainFrame.error=false;
}
else if(MainFrame.error2)
{ MainFrame.text.setText("数据过大,造成溢出");
MainFrame.computable=false;
MainFrame.error2=false;
}
else
{ MainFrame.text.setText(" "+approximation(MainFrame.answear));
MainFrame.computable=true;
}
}
else if((s=='-')&&(MainFrame.computable))//如果是“-”
{ comput(Double.parseDouble(MainFrame.text.getText()));
MainFrame.ysf="-";
MainFrame.start=true;
MainFrame.point=false;
MainFrame.fnumber=false;
if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
MainFrame.computable=false;
MainFrame.error=false;
}
else if(MainFrame.error2)
{ MainFrame.text.setText("数据过大,造成溢出");
MainFrame.computable=false;
MainFrame.error2=false;
}
else
{ MainFrame.text.setText(" "+approximation(MainFrame.answear));
MainFrame.computable=true;
}
}
else if((s=='*')&&(MainFrame.computable))//如果是“*”
{ comput(Double.parseDouble(MainFrame.text.getText()));
MainFrame.ysf="*";
MainFrame.start=true;
MainFrame.point=false;
MainFrame.fnumber=false;
if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
MainFrame.computable=false;
MainFrame.error=false;
}
else if(MainFrame.error2)
{ MainFrame.text.setText("数据过大,造成溢出");
MainFrame.computable=false;
MainFrame.error2=false;
}
else
{ MainFrame.text.setText(" "+approximation(MainFrame.answear));
MainFrame.computable=true;
}
}
else if((s=='/')&&(MainFrame.computable))//如果是“/”
{ comput(Double.parseDouble(MainFrame.text.getText()));
MainFrame.ysf="/";
MainFrame.start=true;
MainFrame.point=false;
MainFrame.fnumber=false;
if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
MainFrame.computable=false;
MainFrame.error=false;
}
else if(MainFrame.error2)
{ MainFrame.text.setText("数据过大,造成溢出");
MainFrame.computable=false;
MainFrame.error2=false;
}
else
{ MainFrame.text.setText(" "+approximation(MainFrame.answear));
MainFrame.computable=true;
}
}
else if((s=='.')&&(MainFrame.computable)) //如果是小数点键
{ if(!MainFrame.point)
{ MainFrame.text.setText(MainFrame.text.getText()+s);
MainFrame.point=true;
MainFrame.fnumber=true;
}
MainFrame.start=false;
}
else if((s=='\n')&&(MainFrame.computable))//如果是“=”
{ comput(Double.parseDouble(MainFrame.text.getText()));
MainFrame.ysf="=";
MainFrame.start=true;
MainFrame.point=false;
MainFrame.fnumber=false;
if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
MainFrame.computable=false;
MainFrame.error=false;
}
else if(MainFrame.error2)
{ MainFrame.text.setText("数据过大,造成溢出");
MainFrame.computable=false;
MainFrame.error2=false;
}
else { MainFrame.text.setText(" "+approximation(MainFrame.answear));
MainFrame.computable=true;
}
}
else if((s=='\b')&&(MainFrame.computable))//如果是退格键
{ a=MainFrame.text.getText();
if(a.length()>1)
{ a = MainFrame.text.getText().substring(0, MainFrame.text.getText().length()-1);
MainFrame.text.setText(a);
}
else { MainFrame.text.setText("0");
MainFrame.start=true;
a="0";//防止a的长度为0而使退格键失效
}
}
}
public void keyReleased(KeyEvent e){}
public void keyPressed(KeyEvent e){}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -