理
{
if(e.getSource()==button18)
{ Textshow.setEditable(true);
Textshow.setText("");
Labelnow.setBackground(Color.green);
Labelnow.setText("请按标准的数学形式输入数字!"); }
else
{
if(e.getSource()==button20)
{
String QU=new String(Textshow.getText( ) );
System.out.println();
System.out.println(); //在DOS中显示计算过程前,先空两行。便于前后计算的区分!
System.out.println("即将计算的表达式是:"+QU);
Labelnow.setText("计算程序正在运行");
appendchar( button20.getLabel());
appendchar( countall ( QU ) );
Textshow.setEditable(false); //设置次文本域不可编辑
}
else
{ appendchar(e.getActionCommand( ) ) ; }
}
}
public void appendchar(String aa) //追加被激活按钮的对应事件名字
{
StringBuffer tt=new StringBuffer(Textshow.getText().trim()); //去除空格等无用字符
tt.append(aa);
Textshow.setText (new String(tt) );
}
public String countall(String tt) //从整体上,来以括号为单位分解来用户输入的数学表达式的方法
{
StringBuffer mm=new StringB
uffer(tt);
Boolean errorstop=true;
int i, j, m=0, n=0;
for( ; m!= -1 ; ) //开始对括号内容经行优先处理
{ m= -1; n=-2;
for(i=0; i
if( mm.charAt(i)== '(' ) { m=i; System.out.println(" 在"+m+"处找到'(' " ); }
for(n=-1,j=m+1;j if(mm.charAt(j)== ')') { n=j; System.out.println(" 在"+n+"处找到')' " ); break;}
if(m<0&;&;n<0) break; //如没有找到括号,则跳出次部分
else
{
if(m*n<0||m>=n-1||m>0&;&;Iscountnum(mm.charAt(m-1))==0||n Iscountnum( mm.charAt(n+1))==0 ) //如找到:半个括号,无内容的括号,前半个括号一个字符是数字或者是小数点,后一个括号的下一个字符是数字或者是小数点都提示一下错误
{ Labelnow.setBackground(Color.red);
Labelnow.setText("小括号语法错误,请纠正!");
System.out.println("发生小括号语法错误。");
System.out.println(mm);
mm.setLength(0); //强行清空字符变量的内容,使此方法此次计算的返回值为空
errorsto