我在用JBuilder做个小的计算器,现做出+-*/四则运算。有几个小问题想问问各位。
1. 把界面都已经做出来了,每个数字都为jbutton.但这样一来,我不知道当我按了button以后他应该返回什么了,是不是把void改成Int,里面包含两句表达式第一句是让显示出来,第二句是返回数字?
2. 然后当按+-*/四个按键中的一个时,不同的按键调用不同的方法,最后返回出来接过,再通过一个button让这个结果显示在lable上。但如何不让当你同时按两个或两个以上的算法出错?还有,这个的计算到底在什么位置应该?因为方法需要两个参数,而使用运算键是在第二个之前。这个应该怎么解决?

解决方案 »

  1.   

    首先对所有的jbutton 设置一个监听 要做什么就在actionPerformed()中写
    计算可以用一个小的技巧 以a+b+c  为例你要把它看成0+a+b+c 令sum1 = 0 sign ='+' 输入a时 sum2=a  在输入+时进行计算 就是0+a的值 sum1 = sum1+sum2 以后sum1就是保留上次计算的结果sum2为第二个计算的数  每次输入+-*/时进行计算 这样就可以实现连续运算了
      

  2.   

    这个监听所做的动作是在显示lable里显示,但这个又出现一个问题,就是我每个数字按键都监听,lable就会不断的更新,致使我无法计算2位以上的数字。是不是需要if来判断,然后根据判断来追加新的数字(有可能是字符串)?还是其他有什么更简单的办法。
    还有这个计算,你说的设两个变量我明白,但在点“+”这个button时,监听所要做的就是计算这两个变量。但又出现一个上下连接的问题:这两个变量如何找到相应的数(在第一个问题解决了以后)?是不是sum1是不需要赋值的(因为初始化和不断的更新),然后只需要把运算button后的数字赋给sum2就可以了,然后等待第2个运算button来进行上一次的两数运算?但这又应生出一个问题:如何判断运算符为结束?
      

  3.   

    监听得到只是你按了的什么键就是button上的值 每次都是,不会前后叠加在一起,  
    计算的问题就是sum1保存上一次的值 sum2 为新输入的值。
    下面是我写的一点片断 
     public void actionPerformed(ActionEvent e) throws ArithmeticException{
         String s = e.getActionCommand(); 
    case '1':
         case '2':
         case '3':
         case '4':
         case '5':
         case '6':
         case '7':
         case '8':
         case '9':
         case '0':
            case '.': 
            if(sign)
          {
          t.setText(s);
          sign = false;
                }
                else{
                 t.setText(t.getText() + s);
              
                
                }
           break;
           case '+':
           case '-':
           case '*':
           case '/':
            {
            c_sign = s;
            sum1 =Double.parseDouble(t.getText());
            t.setText("");
            }
            break;
    case '=':
    {

    sum2 = Double.parseDouble(t.getText());
    t.setText("");
    sign = true;
    if(c_sign == "+"){
    sum1+=sum2;
    }
    else if(c_sign == "-"){
    sum1-=sum2;
    }
    else if(c_sign == "*"){
    sum1*=sum2;
    }
    else if(c_sign == "/"){
    sum1/=sum2;
    }
    t.setText(""+sum1);

    break;
                 }
    }
      

  4.   

    不好意思 发错了 下面这个才是
    import java.io.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class Calculator extends JFrame implements ActionListener {private String[] name_north = {"Backspace", "   CE   ", "    C    "};
    private String[] name_left = {"MC", "MR", "MS", "M+"};
    private String[] name_right = {"sqrt", "%", "1/x", "="};
    private String[] name_center = {"7", "8", "9", "/", "4", "5", "6", "*", "1",
    "2", "3", "-", "0", "+/-", ".", "+"};private JButton[] button_north = new JButton[name_north.length];
    private JButton[] button_left = new JButton[name_left.length];
    private JButton[] button_right = new JButton[name_right.length];
    private JButton[] button_center = new JButton[name_center.length];private String s = "";
    private boolean sign = true;
    private double sum1= 0.0; 
    private double sum2; 
    private double x;
    private double y;
    private char sign_js = '+';
    private char sign_dy ;
    private boolean flag = true;
    private boolean biaoji_dy = true; JMenuBar mb = new JMenuBar();
    JMenu m_edit = new JMenu("编辑");
    JMenu m_view = new JMenu("查看");
    JMenu m_help = new JMenu("帮助");
    JMenuItem m1_copy = new JMenuItem("复制");
    JMenuItem m1_paste = new JMenuItem("粘贴");
    JMenuItem m2_biaozhun = new JMenuItem("标准型");
    JMenuItem m2_kexue = new JMenuItem("科学型");
    JMenuItem m2_num_group = new JMenuItem("数字分组");
    JMenuItem m3_help = new JMenuItem("帮助");
    JMenuItem m3_about = new JMenuItem("关于");
    JPanel p1 = new JPanel();
    JPanel p2 = new JPanel();
    JPanel p3 = new JPanel();
    JPanel p4 = new JPanel();
    JPanel p5 = new JPanel();
    JPanel p6 = new JPanel();static JTextField t = new JTextField("0", 15);
    public Calculator() {
    JFrame f = new JFrame("计算器");
    mb.add(m_edit);
    mb.add(m_view);
    mb.add(m_help);
    f.setJMenuBar(mb);
    m_edit.add(m1_copy);
    m_edit.add(m1_paste);
    m_view.add(m2_biaozhun);
    m_view.add(m2_kexue);
    m_view.add(m2_num_group);
    m_help.add(m3_help);
    m_help.add(m3_about);f.setLayout(new BorderLayout(4, 4)); 
    f.add(t, BorderLayout.NORTH);
    t.addActionListener(this);
    t.setEditable(false);
    t.setHorizontalAlignment(JTextField.RIGHT);
    f.add(p2, BorderLayout.CENTER);
    p2.setLayout(new BorderLayout(5, 5));
    p2.add(p3, BorderLayout.NORTH);
    p2.add(p4, BorderLayout.WEST);
    p2.add(p5, BorderLayout.EAST);
    p2.add(p6, BorderLayout.CENTER);
    // p3.setLayout(new FlowLayout(FlowLayout.RIGHT));
    p3.setLayout(new GridLayout(1, 4, 4, 4));
    for (int i = 0; i < button_north.length; i++) {
    button_north[i] = new JButton(name_north[i]);
    button_north[i].setForeground(Color.red);
    p3.add(button_north[i]);
    button_north[i].addActionListener(this);
    }
    p4.setLayout(new GridLayout(4, 1, 4, 4));
    for (int j = 0; j < button_left.length; j++) {
    button_left[j] = new JButton(name_left[j]);
    button_left[j].setForeground(Color.red);
    p4.add(button_left[j]);
    }
    p5.setLayout(new GridLayout(4, 1, 4, 4));
    for (int i = 0; i < button_right.length; i++) {
    button_right[i] = new JButton(name_right[i]);
    button_right[i].setForeground(Color.red);
    p5.add(button_right[i]);
    button_right[i].addActionListener(this);
    }
    p6.setLayout(new GridLayout(4, 4, 4, 4));
    for (int i = 0; i < button_center.length; i++) {
    button_center[i] = new JButton(name_center[i]);
    button_center[i].setForeground(Color.BLUE);
    p6.add(button_center[i]);button_center[i].addActionListener(this);
    }f.setSize(300,300);
    f.setBackground(new Color(230, 228, 210));
    f.setVisible(true);
    f.pack();
    f.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });}public void actionPerformed(ActionEvent e) throws ArithmeticException{
    String s = e.getActionCommand();
    switch(s.charAt(0)){
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
    case '0':{
    if(sign)
    {
    t.setText(s);
    sign = false;}
    else if((Double.parseDouble(t.getText())== 0)&&s=="0"){
    t.setText("0");
    sign = true;
    }else if(Double.parseDouble(t.getText())!= 0){
    t.setText(t.getText() + s);}
    else{
    //t.setText("");
    t.setText(t.getText() + s);
    }
    flag =true;}
    break;
    case '.':
    if(t.getText().contains(".")){
    t.setText("");
    t.setText("已经输入了小数点");
    for(int i =0;i<button_center.length;i++)
    {
    button_center[i].setEnabled(false);
    }
    }else if(sign==false)
    {
    t.setText(t.getText() + s);
    flag =true;}
    else {
    if(Double.parseDouble(t.getText())== 0){
    t.setText("0.");
    sign = false;
    flag = true;
    }
    }break;case '+':
    case '-':
    case '*':
    case '/':
    { if(flag == true){System.out.println("Sum1 = "+sum1 +"Sum2 = "+sum2);
    sum2=Double.parseDouble((t.getText()));
    System.out.println("Sum1 = "+sum1 +"Sum2 = "+sum2);
    t.setText("");
    sign = true;
    if(sign_js =='+'){
    sum1 += sum2;
    t.setText(""+sum1);
    }
    else if(sign_js =='-'){
    sum1 -= sum2;
    t.setText(""+sum1);
    }
    else if(sign_js =='*'){
    sum1 *= sum2;
    t.setText(""+sum1);
    }
    else if(sign_js =='/'){
    if(sum2 != 0){sum1 /= sum2;
    t.setText(""+sum1);
    }else{
    for(int i =0;i<button_right.length;i++)
    {
    button_right[i].setEnabled(false);
    }
    for(int i =0;i<button_center.length;i++)
    {
    button_center[i].setEnabled(false);
    }
    t.setText("ERROR");}
    }System.out.println("Sum1 = "+sum1 +"Sum2 = "+sum2);
    sign_js =s.charAt(0) ;
    t.setText(""+sum1);
    flag = false;
    System.out.println(flag);
    }else {
    t.setText(""+sum1);
    sign_js = s.charAt(0);
    sign_dy = sign_js;
    flag = false;
    sign = true;
    }
    biaoji_dy = true; }
    break;case '=':
    {
    if(biaoji_dy){
    if(sign_dy !='=')
    {System.out.println("Sum1 = "+sum1 +"Sum2 = "+sum2+"X = "+x+"sign_dy = "+sign_dy);
    sum2 = Double.valueOf(t.getText());if(sign_js =='+'){
    sum1 += sum2;
    t.setText(""+sum1);
    }
    else if(sign_js =='-'){
    sum1 -= sum2;
    t.setText(""+sum1);
    }
    else if(sign_js =='*'){
    sum1 *= sum2;
    t.setText(""+sum1);}
    else if(sign_js =='/'){
    if(sum2 != 0){sum1 /= sum2;
    t.setText(""+sum1);
    }else{
    for(int i =0;i<button_right.length;i++)
    {
    button_right[i].setEnabled(false);
    }
    for(int i =0;i<button_center.length;i++)
    {
    button_center[i].setEnabled(false);
    }
    t.setText("ERROR");}
    }System.out.println("Sum1 = "+sum1 +"Sum2 = "+sum2+"X = "+x+"sign_dy = "+sign_dy);sign_dy = '=';
    } else 
    {
    x = sum2;
    if(sign_js =='+'){
    sum1 += sum2;
    t.setText(""+sum1);
    }
    else if(sign_js =='-'){
    sum1 -= sum2;
    t.setText(""+sum1);
    }
    else if(sign_js =='*'){
    sum1 *= sum2;
    t.setText(""+sum1);
    }
    else if(sign_js =='/'){
    if(sum2 != 0){sum1 /= sum2;
    t.setText(""+sum1);
    }else{
    for(int i =0;i<button_right.length;i++)
    {
    button_right[i].setEnabled(false);
    }
    for(int i =0;i<button_center.length;i++)
    {
    button_center[i].setEnabled(false);
    }
    t.setText("ERROR");}
    }System.out.println("Sum1 = "+sum1 +"Sum2 = "+sum2+"X = "+x+"sign_dy = "+sign_dy);} }
    else {}flag = false;
    sign = true;
    }
    break;
    public static void main(String[] args) {Calculator c = new Calculator();
    }
    }
      

  5.   

    这是我做的一个简单的计算器
    代码也有说明
    你可以看下
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;public class calculator extends JFrame implements ActionListener
    {
    JTextField jtext;
    JButton[] num=new JButton[10];
    JButton a,b,c,d,h,f,down;
    double n1,n2,n3,n4,n5;
    char t;
    double result; public calculator()
    {
    Container con=getContentPane();
    con.setLayout(new BorderLayout());

    jtext=new JTextField(11);
                   jtext.setVisible(true);
    JPanel p1=new JPanel();
    JPanel p2=new JPanel();
    JPanel p3=new JPanel(); p1.setLayout(new GridLayout(3,3,2,2));
    p2.setLayout(new GridLayout(3,2,2,2));
    p3.setLayout(new GridLayout(1,1,1,1));
                           
            //用循环添加数字1~9 为各自注册监听器 ,并将其添加到面板p1             
    for (int i=0;i<9;i++)
    {
      num[i]=new JButton(""+(i+1));
    p1.add(num[i]);
    num[i].addActionListener(this);
    }

    //添加按钮0  + - * /
     JButton a=new JButton(""+0);
              JButton b=new JButton("AC");
     c=new JButton("+");
     d=new JButton("-");
     h=new JButton("*");
     f=new JButton("/");
     down=new JButton("=");
     
    //为0 + - * /各自注册监听器
             a.addActionListener(this);
    b.addActionListener(this);
    c.addActionListener(this);
    d.addActionListener(this);
    h.addActionListener(this);
    f.addActionListener(this);
    down.addActionListener(this);

         
    p2.add(a);
    p2.add(b);
    p2.add(c);
    p2.add(d);
    p2.add(h);
    p2.add(f);
    p3.add(down);
    con.add(p1,BorderLayout.CENTER);
    con.add(jtext,BorderLayout.NORTH);
    con.add(p2,BorderLayout.EAST);
    con.add(p3,BorderLayout.SOUTH);

    }

    public void actionPerformed(ActionEvent e)
    {
    for(int i=0;i<9;i++)
    {
    if(e.getSource().equals(num[i]))
    jtext.setText(jtext.getText()+e.getActionCommand());
    }
    if(e.getSource()==b)
    jtext.setText("");

                  if(e.getSource()==a)
    jtext.setText(jtext.getText()+e.getActionCommand());

    if(e.getSource()==c)
    {
    n1=Double.parseDouble(jtext.getText());
    jtext.setText("");
    t='+';
     }
    if(e.getSource()==d)
    {
    n2=Double.parseDouble(jtext.getText());
    jtext.setText("");
    t='-';
       }
    if(e.getSource()==h)
    {
    n3=Double.parseDouble(jtext.getText());
    jtext.setText("");
         t='*';
     }
     
    if(e.getSource()==f)
    {
    n4=Double.parseDouble(jtext.getText());
    jtext.setText("");
    t='/';
    }
    if(e.getSource().equals(down))
    {
    n5=Double.parseDouble(jtext.getText());

    switch(t)
    {
    case '+':
    {
    result=n1+n5;
    jtext.setText(""+result);
        break;

    }
    case'-':
    {
    result=n2-n5;
    jtext.setText(""+result);
    break;
    }
    case'*':
    {
    result=n3*n5;
    jtext.setText(""+result);
    break;
    }
    case '/':
    {
    if(n4!=0)
    {
    result=n4/n5;
        jtext.setText(""+result);
        }
        break;
    }

    }
        }
    }
    public static void main(String[] args)
    {
    calculator cal=new calculator();
    cal.setSize(270,270);
    cal.setVisible(true);

    }
      
    }