📄 compute.java
字号:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.lang.*;
import java.util.*;
public class Compute extends Applet{
TextField TXT;
Button B;
Label L;
String Str;
Stack Stack_Num=new Stack();
Stack Stack_Act=new Stack();
int fromIndex=1;
String sub_Num;
String sub_Act;
int count=0;
double Num;
int end=0;
int empty=0;
boolean Greater=false;
/* + - * / ( ) i # */
String table[][]={
/* + */ {">",">","<","<","<",">","<",">"},
/* - */ {">",">","<","<","<",">","<",">"},
/* * */ {">",">",">",">","<",">","<",">"},
/* / */ {">",">","<","<","<",">","<",">"},
/* ( */ {"<","<","<","<","<","=","<"," "},
/* ) */ {">",">",">",">"," ",">"," ",">"},
/* i */ {">",">",">",">"," ",">"," ",">"},
/* # */ {"<","<","<","<","<"," ","<","="},
};
public void init() {
GridBagLayout gridbag=new GridBagLayout();
this.setLayout(gridbag);
GridBagConstraints c=new GridBagConstraints();
TXT=new TextField(10);
c.gridy=0;
c.gridx=0;
gridbag.setConstraints(TXT,c);
add(TXT);
B=new Button("=");
c.gridy=1;
c.gridx=0;
gridbag.setConstraints(B,c);
B.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
equal(e);}
});
add(B);
L=new Label(" ");
c.gridy=2;
c.gridx=0;
gridbag.setConstraints(L,c);
add(L);
}
public void equal(ActionEvent e){
Str=String.valueOf(TXT.getText());
Compute t=new Compute();
t.fromIndex=0;
Stack_Act.push("#");
while(t.fromIndex>=0){
int i;int j;String subStr;double Num1=0.0;double Num2=0.0;
if(t.end!=1&&t.Greater==false){t=getStr(t.fromIndex);}
j=GetSubscript(t.sub_Act);
i=GetSubscript(subStr=Stack_Act.peek().toString());
char c=table[i][j].charAt(0);
switch(c){
case '<':Stack_Act.push(t.sub_Act);System.out.println("本次进栈算符"+t.sub_Act);
if(t.empty!=1&&t.Greater==false){Stack_Num.push(t.sub_Num);System.out.println("本次进栈数符"+t.sub_Num);}
t.Greater=false;
break;
case '>':if(t.empty!=1&&t.Greater==false){Stack_Num.push(t.sub_Num);System.out.println("本次进栈数符"+t.sub_Num);}
String q=Stack_Act.pop().toString();System.out.println("本次出栈算符"+q);
try{
String s1=Stack_Num.pop().toString();System.out.println("本次出栈数符s1"+s1);
String s2=Stack_Num.pop().toString();System.out.println("本次出栈数符s2"+s2);
Num1=Double.parseDouble(s1);
Num2=Double.parseDouble(s2);
}catch(NumberFormatException err){
System.out.print("输入错误0!"+err);
L.setText("输入错误!");
}
switch(i){
case 0:Num1=Num2+Num1;break;
case 1:Num1=Num2-Num1;break;
case 2:Num1=Num2*Num1;break;
case 3:if(Num1<0.0||Num1>0.0){Num1=Num2/Num1;}
else{L.setText("除数不能为0!");
System.err.close();System.exit(1);
}break;
default:L.setText("错误!");System.err.close();System.exit(1);System.out.print("本次算符"+i);
}
String d=Double.toString(Num1);
Stack_Num.push(d);
System.out.print("本次计算结果"+Num1);
System.out.println("本次比较算符"+t.sub_Act);
t.Greater=true;
if(j==7||j==5){t.end=1;t.empty=1;System.out.println("@@@@@@");}
break;
case '=':if(j==5){
String w=Stack_Act.pop().toString();
t.end=0;t.Greater=false;
System.out.println("本次出栈算符"+w);}
else if(j==7){
Stack_Act.pop();
try{
String s=Stack_Num.pop().toString();
t.Num=Double.parseDouble(s);
L.setText("结果是:"+t.Num);
}catch(NumberFormatException err){
System.out.print("输入错误2!"+err);
L.setText("输入错误!");
}
t.fromIndex=-1;
}
break;
default:;
}
}
}
int GetSubscript(String act){
int subscript=-1;
char a=act.charAt(0);
switch(a){
case '+':subscript=0;
break;
case '-':subscript=1;
break;
case '*':subscript=2;
break;
case '/':subscript=3;
break;
case '(':subscript=4;
break;
case ')':subscript=5;
break;
case 'i':subscript=6;
break;
case '#':subscript=7;
break;
default:;
}
return(subscript);
}
Compute getStr(int fromIndex){
Compute x1=new Compute();
int z[]={-1,-1,-1,-1,-1,-1};
if(fromIndex<Str.length()){
z[0]=Str.indexOf("+",fromIndex);z[1]=Str.indexOf("-",fromIndex);z[2]=Str.indexOf("*",fromIndex);
z[3]=Str.indexOf("/",fromIndex);z[4]=Str.indexOf("(",fromIndex);z[5]=Str.indexOf(")",fromIndex);
}else{for(int i=0;i<=5;i++){z[i]=-1;}}
int Min=1000;System.out.println("本次开始查找位:"+fromIndex+"串长:"+Str.length());
for(int i=0;i<=5;i++){
if(0<=z[i]&&z[i]<Min){Min=z[i];System.out.print("本次匹配算符:"+i);}
else if(z[i]<0){x1.count=x1.count+1;}
}
if(x1.count==6){
if(fromIndex<Str.length()){
x1.sub_Num=Str.substring(fromIndex).trim();
}
if(x1.sub_Num==""||x1.sub_Num==null){x1.empty=1;System.out.println("本次取得数符:"+x1.sub_Num);}
x1.end=1;x1.sub_Act="#";System.out.println("本次取得算符 #");
}
else{
x1.sub_Num=Str.substring(fromIndex,Min).trim();
try{
double n=Double.parseDouble(x1.sub_Num);
x1.sub_Num=String.valueOf(n).toString();
}catch(NumberFormatException err){
System.out.print("输入空字符!"+err);
x1.empty=1;
}
x1.sub_Act=Str.substring(Min,Min+1);System.out.println("本次取得算符"+x1.sub_Num);
x1.fromIndex=Min+1;System.out.println("本次取得算符位:"+Min);
}
return(x1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -