📄 calc.java
字号:
import java.applet.*;
import java.awt.event.*;
import java.awt.*;
public class Calc extends Applet implements ActionListener{
double num1,num2; //存储要运算的操作数
String temp=""; //存储要保存的操作数
int op[]={0,0}; //标识按下的操作符
boolean numSign=false; //赋值标记
boolean dotSign=false; //小数点标记
boolean input=false; //输入标记
boolean cueSign=false; //出错提示标记
boolean save=false; //保存标记
boolean on_off=false; //开关标记
TextField txt1=new TextField("0",24);
TextField txt2=new TextField(2);
String fun[]={"Back","CE","C","ON","MC","MR","MS","M+"};
String gen[]={"7","8","9","/","sqrt","4","5","6","*","%",
"1","2","3","-","1/x","0","+/-",".","+","="};
Button button_fun[]=new Button[fun.length];
Button button_gen[]=new Button[gen.length];
Panel p0=new Panel();
Panel p1=new Panel(new GridLayout(1,4,6,6));
Panel p2=new Panel(new GridLayout(5,5,6,6));
Panel p3=new Panel(new BorderLayout(0,6));
public void init(){
int i,len1=fun.length,len2=gen.length;
Color bgc=new Color(102,153,153);
txt1.setEditable(false);txt2.setEditable(false);
txt1.setBackground(new Color(0,153,204));
txt1.setFont(new Font("TimesRoman",Font.BOLD,15));
txt1.setForeground(Color.green);
txt2.setForeground(Color.red);
setBackground(bgc);
for(i=0;i<len1;i++){
button_fun[i]=new Button(fun[i]);
button_fun[i].setForeground(Color.red);
button_fun[i].addActionListener(this);
}
for(i=0;i<len2;i++){
button_gen[i]=new Button(gen[i]);
button_gen[i].setForeground(Color.blue);
button_gen[i].addActionListener(this);
}
p0.add(txt1);
for(i=0;i<4;i++) p1.add(button_fun[i]);
p2.add(txt2);
for(i=4;i<len1;i++) p2.add(button_fun[i]);
for(i=0;i<len2;i++) p2.add(button_gen[i]);
p3.add(p1,"North");p3.add(p2,"South");
setLayout(new FlowLayout(FlowLayout.CENTER,0,12));
add(p0); add(p3);
off();
}
public void actionPerformed(ActionEvent e){
long intNum; //临时变量
Object button=e.getSource();
//错误提示处理
if(cueSign==true){showText("0");cueSign=false;}
//开关事件处理
if(button==button_fun[3]){
if(!on_off){on();on_off=true;}
else {off();on_off=false;}
return;
}
String str=txt1.getText(); //当前显示框内容
str=str.trim();
num2=Double.parseDouble(str); //字符串转化为数字
//数字键事件处理
if(button==button_gen[0]) {inputNumber("7");return;}
if(button==button_gen[1]) {inputNumber("8");return;}
if(button==button_gen[2]) {inputNumber("9");return;}
if(button==button_gen[5]) {inputNumber("4");return;}
if(button==button_gen[6]) {inputNumber("5");return;}
if(button==button_gen[7]) {inputNumber("6");return;}
if(button==button_gen[10]) {inputNumber("1");return;}
if(button==button_gen[11]) {inputNumber("2");return;}
if(button==button_gen[12]) {inputNumber("3");return;}
if(button==button_gen[15]) {inputNumber("0");return;}
//运算键事件处理
if(button==button_gen[18]) {op[1]=1;operate(1);return;}
if(button==button_gen[13]) {op[1]=2;operate(1);return;}
if(button==button_gen[8]) {op[1]=3;operate(1);return;}
if(button==button_gen[3]) {op[1]=4;operate(1);return;}
if(button==button_gen[19]) {operate(2);return;}
//开方键(sqrt)事件处理
if(button==button_gen[4]){
num2=Math.sqrt(num2);
intNum=(long)(num2);
if((double)(intNum)==num2)
showText(String.valueOf(intNum));
else showText(String.valueOf(num2));
input=false; dotSign=false;
return;
}
//百分号(%)事件处理
if(button==button_gen[9]){
showText(String.valueOf(num2/100));
input=false; dotSign=false;
return;
}
//倒数键(1/x)事件处理
if(button==button_gen[14]){
if(num2!=0) showText(String.valueOf(1/num2));
else {showText("除数不能为零! "); cueSign=true;}
input=false; dotSign=false;
return;
}
// 正负号(+/-)事件处理
if(button==button_gen[16]){
if(num2!=0){
intNum=(long)(num2);
if((double)(intNum)==num2)
showText(String.valueOf(-intNum));
else showText(String.valueOf(-num2));
}
return;
}
//小数点事件处理
if(button==button_gen[17]){
if(!input){
showText("0.");
dotSign=true; input=true;
}
else if(!dotSign){
showText(str+".");
dotSign=true; input=true;
}
return;
}
//退格键(Back)事件处理
if(button==button_fun[0]){
if(input){
if(str.length()>2 || str.length()==2 && num2>0){
showText(str.substring(0,str.length()-1));
if(str.substring(str.length()-1,str.length()).equals("."))
dotSign=false;
}
else {showText("0");input=false;dotSign=false;}
}
return;
}
//清零键(CE)事件处理
if(button==button_fun[1]) {
showText("0");
input=false; dotSign=false;
return;
}
//清零键(C)事件处理
if(button==button_fun[2]){
showText("0");
num1=0; op[0]=op[1]=0;
numSign=false; dotSign=false;
input=false;
return;
}
//清零键(MC)事件处理
if(button==button_fun[4]){
temp="";save=false;
txt2.setText("");
return;
}
//提取键(MR)事件处理
if(button==button_fun[5]){
if(Double.parseDouble(temp)!=0){
showText(temp);
input=false; dotSign=false;
}
return;
}
//保存键(MS)事件处理
if(button==button_fun[6]){
if(num2!=0){
temp=str;
txt2.setText(" M"); save=true;
input=false; dotSign=false;
}
return;
}
//加保存键(M+)事件处理
if(button==button_fun[7]){
if(num2!=0){
if(save==false){
temp=str; save=true;
txt2.setText(" M");
}
else{
intNum=(int)(Double.parseDouble(temp)+num2);
if(intNum==Double.parseDouble(temp)+num2)
temp=String.valueOf(intNum);
else temp=String.valueOf(Double.parseDouble(temp)+num2);
}
input=false; dotSign=false;
}
}
}
//开关关事件处理方法
public void off(){
int i;
for(i=0;i<fun.length;i++) button_fun[i].setEnabled(false);
for(i=0;i<gen.length;i++) button_gen[i].setEnabled(false);
button_fun[3].setEnabled(true);
button_fun[3].setLabel("ON");
button_fun[3].setForeground(Color.red);
showText("");txt2.setText("");
num1=0; op[0]=op[1]=0;
numSign=false; dotSign=false;
input=false;save=false;
temp="";
}
//开关开事件处理方法
public void on(){
int i;
for(i=0;i<fun.length;i++) button_fun[i].setEnabled(true);
for(i=0;i<gen.length;i++) button_gen[i].setEnabled(true);
button_fun[3].setLabel("OFF");
button_fun[3].setForeground(Color.green);
showText("0");
}
//输出显示处理方法
public void showText(String str){
int i,len=str.length();
String blank="";
for(i=0;i<23-len;i++) blank=blank.concat(" ");
txt1.setText(blank+str);
}
//输入数字处理方法
public void inputNumber(String s){
String str=txt1.getText();
str=str.trim();
if(Double.parseDouble(str)==0 && s.equals("0") && dotSign==false)
;
else if(input==false){
showText(s);
if(Double.parseDouble(s)!=0) input=true;
}
else showText(str+s);
}
//运算操作方法
public void operate(int i){
long intNum;
if(i==1){
if(op[0]==0)
switch(op[1]){
case 1: num1=num2;op[0]=1;break;
case 2: num1=num2;op[0]=2;break;
case 3: num1=num2;op[0]=3;break;
case 4: num1=num2;op[0]=4;break;
}
else{
switch(op[0]){
case 1: num1+=num2;break;
case 2: num1-=num2;break;
case 3: num1*=num2;break;
case 4: if(num2!=0) num1/=num2;
else cueSign=true;
break;
}
if(cueSign==false){
intNum=(long)(num1);
if((double)(intNum)==num1)
showText(String.valueOf(intNum));
else showText(String.valueOf(num1));
switch(op[1]){
case 1: op[0]=1;break;
case 2: op[0]=2;break;
case 3: op[0]=3;break;
case 4: op[0]=4;break;
}
}
else {showText("除数不能为零! "); op[0]=0;}
}
dotSign=false;
input=false;
}
else{
switch(op[0]){
case 1: num1+=num2;break;
case 2: num1-=num2;break;
case 3: num1*=num2;break;
case 4: if(num2!=0) num1/=num2;
else cueSign=true;
break;
}
if(cueSign==false){
intNum=(long)(num1);
if((double)(intNum)==num1)
showText(String.valueOf(intNum));
else showText(String.valueOf(num1));
}
else showText("除数不能为零! ");
op[0]=0;
dotSign=false;
input=false;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -