这是一个很简单的计算器,当除数为0时为什么不能作出错误提示呢?是哪里出错了??
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
//显示计算器结果的窗体
class Result extends JPanel{
JTextField text=new JTextField("0");
Result(){
text.setHorizontalAlignment(SwingConstants.LEFT);
text.enable(false);
setLayout(new BorderLayout());
add(text,BorderLayout.CENTER);
}
}
//计算器数字按纽定义面板
class Number_Key extends JPanel{
  JButton one=new JButton(" 1 ");
  JButton two=new JButton(" 2 ");
  JButton three=new JButton(" 3 ");
  JButton plus=new JButton(" + ");
  JButton ce=new JButton(" C ");
  JButton four=new JButton(" 4 ");
  JButton five=new JButton(" 5 ");
  JButton six=new JButton(" 6 ");
  JButton sub=new JButton(" - ");
  JButton b=new JButton(" B ");
  JButton seven=new JButton(" 7 ");
  JButton eight=new JButton(" 8 ");
  JButton nine=new JButton(" 9 ");
  JButton mul=new JButton(" * ");
  JButton ds=new JButton("1/x");
  JButton zero=new JButton(" 0 ");
  JButton zf=new JButton("+/-");
  JButton point=new JButton(" . ");
  JButton div=new JButton(" / ");
  JButton equal=new JButton(" = ");
  Number_Key(){
  
  setLayout(new GridLayout(4,5,10,10));
     
  add(one);
  add(two);
  add(three);
  add(plus);
  add(ce);
  add(four);
  add(five);
  add(six);
  add(sub);
  add(b);
  add(seven);
  add(eight);
  add(nine);
  add(mul);
  add(ds);
  add(zero);
  add(zf);
  add(point);
  add(div);
  add(equal);
  
  }
  
  
}
//计算器主类
public class Calculator extends JFrame implements ActionListener
{
Result result =new Result();               //定义text的面板
Number_Key number_key =new Number_Key();   //定义按钮面板

boolean com=false;//当单击按钮+/-/*/ /时,com=true

int i=0;//当i=0时说明是我们第一次输入,字符串sum不会累加

String sum="";//存放text的内容
int flag=1;//判断是不是第一次点击运算符 1表是 0表否
int backspace=1;//判断退格键是否有效 1表有效 0表否
int click_ysf=0;//判断上一次点击的是不是运算符 1表是 0表否
double num1,num2,ad;//
double total=0;//存放单击按钮+,-,*,/之前的数值
int symbol=0; //+,-,*,/的代号分别为1,2,3,4
Calculator(){
super("Calculator");   //设定标题
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设定关闭窗体时退出程序
JPanel pane=new JPanel();           //定义主面板
pane.setLayout(new BorderLayout());
pane.add(result,BorderLayout.NORTH);
pane.add(number_key,BorderLayout.SOUTH);
number_key.one.addActionListener(this);    //添加监听事件
number_key.two.addActionListener(this);
number_key.three.addActionListener(this);
number_key.four.addActionListener(this);
number_key.five.addActionListener(this);
number_key.six.addActionListener(this);
number_key.seven.addActionListener(this);
number_key.eight.addActionListener(this);
number_key.nine.addActionListener(this);
number_key.zero.addActionListener(this);
number_key.ce.addActionListener(this);
number_key.plus.addActionListener(this);
number_key.equal.addActionListener(this);
number_key.sub.addActionListener(this);
number_key.mul.addActionListener(this);
number_key.div.addActionListener(this);
    number_key.b.addActionListener(this);
number_key.ds.addActionListener(this);
number_key.zf.addActionListener(this);
number_key.point.addActionListener(this);
setContentPane(pane);
pack();  //初始化窗体大小为正好盛放所有按钮
}
    void jisuan(double a,double b,int c)
     {
switch(symbol){
     case 1://加法
     {
     ad=a+b;
     result.text.setText(ad+"");
     break;
     }
     case 2://减法
     {
     ad=a-b;
     result.text.setText(String.valueOf(ad));
     break;
     }
     case 3://乘法
     {
     ad=a*b;
     result.text.setText(ad+"");
     break;
     }
     case 4://除法
     {
     if(b!=0)
     {
         ad=a/b;
     result.text.setText(ad+"");
     }
else{
result.text.setText("False!");
//System.out.println("False");
}
System.out.println((int)b);
     break;
     }
     }
     num1=ad;
    }
还没有发完 接着下面的回贴

解决方案 »

  1.   

    接上面的程序  void gets(int k)
        {
            com=true;
    i=0;
    if(flag==1)//第一次点击运算符
    {
         num1=Double.parseDouble(result.text.getText());
        
    }
    else if(flag==0&&click_ysf==0)//累加,防止用户多次点击运算符
    {
    num2=Double.parseDouble(result.text.getText());
    jisuan(num1,num2,symbol);
    }
    sum="";
    symbol=k;
    backspace=0;//点击运算符后退格无效
    click_ysf=1;//标记上一次点击了运算符
    flag=0;//标记不是第一次点击运算符
        }
        
        void clicknum(int n)//点击1-9数字键,参数n为点击的数字
        {
           sum=result.text.getText();
       if(com || i==0||Double.parseDouble(sum)==0&&sum.length()<=1)
      {
    result.text.setText(""+n+"");
    com=false;
    i=1;
    }
    else
      {

    result.text.setText(sum+""+n+"");
    }
    backspace=1;//退格有效
    click_ysf=0;//标记上一次不是点击了运算符
        }
    //各个按钮触发的事件
        public void actionPerformed (ActionEvent e){
        /*如果是单击数字按钮那么先要判断是否在此之前单击了+,-,*,/,=,如果是,那么
        com=true,如果没有,com=false;或者是否单击数字键,如果是,i=1,如果没有,i=0;*/        if (e.getSource()==number_key.one){
        clicknum(1);
            }
            else if (e.getSource()==number_key.two){
             clicknum(2);
             }
            else if (e.getSource()==number_key.three){
             clicknum(3);
             }
            else if (e.getSource()==number_key.four){
             clicknum(4);
             }
             else if (e.getSource()==number_key.five){
             clicknum(5);
             }
            else if (e.getSource()==number_key.six){
              clicknum(6);
             }
             else if (e.getSource()==number_key.seven){
             clicknum(7);
             }
            else if (e.getSource()==number_key.eight){
             clicknum(8);
             }
             else if (e.getSource()==number_key.nine){
             clicknum(9);
             }
              else if (e.getSource()==number_key.zero){
             if(com || i==0)
               {
             result.text.setText("0");
             com=false;
             i=1;
             }
             else
               {
             sum=result.text.getText();
             if (Float.parseFloat(sum)>0||Float.parseFloat(sum)<0){
             result.text.setText(sum+"0");
             }
             else{
             if(sum.trim().indexOf(".")==-1){
             result.text.setText(sum);}
             else{
             result.text.setText(sum+"0");
             }
             }
             }
             } 
             else if(e.getSource()==number_key.ce){
                 result.text.setText("0");
                 i=0;
                 flag=1;
                 com=true;
                 num1=0;
                 num2=0;
                 backspace=1;
                 click_ysf=0;
              }
             else if(e.getSource()==number_key.ds){ //倒数
               num1=Double.parseDouble(result.text.getText());
               if(num1!=0)
               {
               ad=1/num1;
    result.text.setText(ad+"");
               }
         else
         result.text.setText("False!");
    com=false;
             i=0;
             flag=1;
            }
            else if(e.getSource()==number_key.b){ //回退
            if(backspace==1){//允许点击回退
            sum=result.text.getText();
           if(sum.length()>1){//2个以上字符
                  sum=sum.substring(0, sum.length() - 1);
           result.text.setText(sum);
          
           if(sum.length()==1&&"-".compareTo(sum)==0)
           result.text.setText("0");
           }
           else if(sum.length()==1)//单个字符
           result.text.setText("0");
            }
          
            }
            else if(e.getSource()==number_key.zf){ //+/-号
            Double k=Double.parseDouble(result.text.getText());
            sum=result.text.getText();
           if(k>0){//正数
           result.text.setText("-"+sum);
           }
           else if(k<0)//负数
           {
           sum=sum.substring(1, sum.length());
           result.text.setText(sum);
           }
           num1=-k;//记录第一个操作数
            }
           
            
            /*不让一个整数出现2个以上的小数点,具体做法是:判断是否已经存在,存在就不添加,不存在就添加*/
            else if (e.getSource()==number_key.point){
             if(com||i==0){
             result.text.setText("0.");
             com=false;
             i=1;
             } 
             else{
             sum=result.text.getText();
             if(sum.trim().indexOf(".")==-1)
             {
             result.text.setText(sum+".");
                }
                else
                {
                result.text.setText(sum);
                }
             }
             click_ysf=0;
            }//获取单击+之前的数值
             else if(e.getSource()==number_key.plus){
             gets(1);
             }//获取单击-之前的数值
             else if(e.getSource()==number_key.sub){
                gets(2);
             }//获取单击*之前的数值
             else if(e.getSource()==number_key.mul){
             gets(3);
             }//获取单击/之前的数值
             else if(e.getSource()==number_key.div){
             gets(4);
             } 
             else if(e.getSource()==number_key.equal){
         gets(symbol);
             }
            }
           public static void main(String[] args){
            Calculator calculator=new Calculator();
            calculator.show();
          }   

    }
      

  2.   

    在事件处理的函数中,你的按钮0没有调用clicknum(0);给忘了吧。
      

  3.   

    在0按键的代码中缺以下两句:
    backspace=1;//退格有效
    click_ysf=0;//标记上一次不是点击了运算符
    也就是以下代码的前面:
             } 
             else if(e.getSource()==number_key.ce){