100分!各位大哥帮忙啊!老师让我们做一个“计算器”?怎么做了?谢谢!

解决方案 »

  1.   

    貌似在DFBZ上课的时候老师也让做了,不过我自己也没做出来
    现在J2SE的都忘啦
      

  2.   

    这个简单啊可惜我没有GUI插件 又不爱布局
      

  3.   

    写了个简易型的,自己再+点功能吧import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    public class Calculate extends JFrame
    implements ActionListener{

    private JTextField display=new JTextField();
    private JButton[] buttons=new JButton[16]; 
    private String[] keys={"7","8","9","/",
       "4","5","6","*",
       "1","2","3","-",
       "0","C","=","+"};
    //to store the 2 inputs;
    private String numStr1="";
    private String numStr2="";
    //to store the result or mid-result;
    private String rstStr="";
    //to define the first input is finished;
    private boolean symb=false;
    //to store the op;
    private char op;

    public Calculate(){
    //Create the Frame;
    setTitle("My Calculate");
    setSize(230,200);

    //Get the pane;
    Container pane=this.getContentPane();
    pane.setLayout(null);

    //add the display;
    display.setSize(200,30);
    display.setLocation(10,10);
    pane.add(display); //add the buttons;
    int x=10,y=40;
    for(int i=0;i<16;i++){
    buttons[i]=new JButton(keys[i]);
    buttons[i].setSize(50,30);
    buttons[i].setLocation(x,y);
    buttons[i].addActionListener(this);
    pane.add(buttons[i]);
    if(i%4!=3){
    x+=50;
    }
    else{
    x=10;
    y+=30;
    }
    }
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE); }
    //implements the interface
    public void actionPerformed(ActionEvent e){
    String str=String.valueOf(e.getActionCommand());
    char ch=str.charAt(0);
    switch(ch){
    case '1':case '2':case '3':
    case '4':case '5':case '6':
    case '7':case '8':case '9':case '0':
    if(!symb){
    numStr1+=ch;
    display.setText(numStr1);
    }
    else{
    numStr2+=ch;
    display.setText(numStr2);
    }
    break;
    case '/':case '*':case '-':case '+':
    op=ch;
    symb=true;
    break;
    case 'C':
    display.setText("");
    numStr1=numStr2="";
    symb=false;
    break;
    case '=':
    rstStr=evaluate();
    display.setText(rstStr);
    try{
    int temp=Integer.parseInt(rstStr);
    }
    catch(NumberFormatException e2){
    numStr1="";
    numStr2="";
    symb=false;
    break;
    }
    numStr1=rstStr;
    numStr2="";
    break;
    }
    } //used to evaluate the result;
    private String evaluate(){
    int result=0;
    try{
    int num1=Integer.parseInt(numStr1);
    int num2=Integer.parseInt(numStr2);
    switch (op){
    case '+':result=num1+num2;
    break;
    case '-':result=num1-num2;
    break;
    case '*':result=num1*num2;
    break;
    case '/':result=num1/num2;
    break;
    }
    return String.valueOf(result);
    }
    catch(ArithmeticException e){
    return "ERROR:"+e.getMessage();
    }
    catch(NumberFormatException e){
    if(numStr1.equals(""))
    return "ERROR:Invalid First Number";
    else
    return "ERROR:Invalid Second Number";
    }
    catch(Exception e){
    return "ERROR";
    }
    }
    public static void main(String args[]){
    Calculate myCalculate=new Calculate();
    }
    }
      

  4.   

    随便在图书馆找个跟JAVA有关的书都有这样的例子。
      

  5.   

    估计lz把6楼的代码直接copy了,呵呵
      

  6.   

    上面那个程序没有处理括号问题和变量问题,
    基础的计算器是需要处理的,一般有几个方法:
    1。采用逆波兰表达式,然后用两个堆栈做运算
    2。采用迭代函数,道理和上面一样,只是堆栈不在堆里面完成,而是通过迭代实现
    3。采用binary tree做,这个比较有效率,而且科学。我建议用这个。叶子是变量,每个节点是运算符,binary tree根据operator的优先度构造这个应该是大学的作业,我大一的时候做过了,不过代码是C
      

  7.   

    我上个学期老师也叫我们 做这个东西,我的代码还在!给你看看,我也是那时候请教的别人的。
    java计算器
    import java.awt.*; 
    import javax.swing.*; 
    import java.awt.event.*; 
    class calculation extends JFrame   
    {public calculation()     /*构造方法*/ 
       {super("计数器"); 
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        initTextPanel();    /*文本框*/ 
        initControlPanel(); /*控制键*/ 
        initKeyPanel();     /*数字和运算符*/ 
        Container pane = getContentPane(); 
        pane.setLayout(new BorderLayout()); 
        pane.add(TextPanel,BorderLayout.NORTH); 
        pane.add(ControlPanel,BorderLayout.CENTER);     
        pane.add(KeyPanel,BorderLayout.SOUTH); 
        pack();     
        try 
        {UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");       
        } 
        catch(Exception ex) 
        {;}        /*设置Windons观感*/ 
        SwingUtilities.updateComponentTreeUI(this); 
        setResizable(false); 
        setVisible(true);   
       } 
        
     private void initTextPanel()  /*设置文本框*/ 
     {  TextPanel=new JPanel(); 
        TextPanel.setLayout(new FlowLayout());     
         Resultarea =new JTextField("0",25);      
         Resultarea.setEditable(false);  /*设置不可编辑*/ 
         Color color=Color.white; 
         Resultarea.setBackground(color);   /*颜色*/ 
         Resultarea.setHorizontalAlignment(JTextField.RIGHT);    /*设置显示位置*/ 
         TextPanel.add(Resultarea);   
     } 
      
     private void initControlPanel() /*设置控制键*/ 
     {ControlPanel=new JPanel(); 
      ControlPanel.setLayout(new GridLayout(1,3,4,4));   
      JButton b1=new JButton("Backspace");    /*Backspace键*/ 
      b1.setFont(font1); 
      b1.addActionListener(new ActionListener()    
         {public void actionPerformed(ActionEvent e)  
           {String s1=Resultarea.getText(); 
             int l=s1.length(); 
             Resultarea.setText(s1.substring(0 ,l-1)); 
            } 
         }); 
         
      ControlPanel.add(b1); 
      JButton b2=new JButton("CE");   /*CE键*/ 
      b2.setFont(font1); 
      b2.addActionListener(new ActionListener() 
        {public void actionPerformed(ActionEvent e)  
           {Resultarea.setText("0"); 
            isNew=true; 
           } 
         });     
      ControlPanel.add(b2); 
       
      JButton b3=new JButton("C");  /*C键*/ 
      b3.setFont(font1); 
      b3.addActionListener(new ActionListener() 
         {public void actionPerformed(ActionEvent e)  
            {Resultarea.setText("0"); 
             pnum=""; 
             operation=""; 
             isNew=true; 
            } 
         });     
      ControlPanel.add(b3);    
     } 
      
     
      

  8.   

    private void initKeyPanel()   /*设置数字键和运算符键*/ 
     {String key[] = {"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="}; 
        KeyPanel = new JPanel(); 
        KeyPanel.setLayout(new GridLayout(4,5,4,4)); 
        for(int i=0;i<20;i++) 
          {String label = key[i]; 
           JButton b = new JButton(label); 
           b.setActionCommand(key[i]); 
           b.setFont(font2); 
           KeyPanel.add(b); 
           b.addActionListener(new ActionListener()  /*无名监听器*/ 
            {public void actionPerformed(ActionEvent e) 
               {Key_actionPerformed(e); 
               } 
            }); 
          } 
       }      
      public void Key_actionPerformed(ActionEvent e) /*数字键和运算符键无名监听器*/ 
           {String s=(e.getActionCommand()); 
            String st=Resultarea.getText(); 
                  if(s.equals("0"))          /*输入数为0*/ 
                 {if(st.equals("0")) 
                    return; 
                  else  
                    {if(!isNew)                 
                       Resultarea.setText(st+"0");  
                     else 
                       Resultarea.setText("0");               
                    }   
                 isNew=false;  
                 return; 
                } 
              
              if(s.equals("+/-"))  /*输入数为+/-*/ 
                 {double k=Double.parseDouble(st);          
                    {if(k!=0) 
                       display(-k); 
                      
                    } 
                   return;   
                  } 
               
             if(s.equals("1")||s.equals("2")||s.equals("3")||s.equals("4")||s.equals("5")||s.equals("6")||s.equals("7")||s.equals("8")||s.equals("9")) /*输入1-9*/ 
                     {if(!isNew) 
                        Resultarea.setText(st+s); 
                      else 
                        { Resultarea.setText(s);    
                          isNew=false;     
                        } 
                       return;  
                      } 
                       
             if(s.equals("."))  /*输入小数点*/ 
                {if(Resultarea.getText().indexOf(".")==-1)  /*不存在小数点*/ 
                   {if(isNew)                   
                       {Resultarea.setText("0.");                    
                        isNew=false; 
                       } 
                    else  
                       Resultarea.setText(st+"."); 
                   } 
                 return; 
                }  
                      
             isNew=true;          /*按下运算符,输入新的数*/                  
             if(s.equals("=")) 
                 {compute(s);  
                     operation="";                       
                 } 
             else  
                {if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")) /*二目运算符号*/ 
                    {if(operation.equals("")) 
                        {pnum=Resultarea.getText();                       
                           operation=s;                            
                        }                           
                      else 
                        compute(s);                      
                     }                            
                 else   /*一目运算*/ 
                    {Count count1=new Count(Double.parseDouble(st)); 
                     if(s.equals("sqrt")) 
                        { 
                          display(count1.sqrt()); 
                              
                        }  
                     else 
                        {if(s.equals("1/x"))      
                           {if(st.equals("0")) 
                              {Resultarea.setText("除数不能为0."); 
                               operation=""; 
                               pnum=""; 
                              } 
                            else   
                               display(count1.reciprocal());     /*求倒数*/ 
                           } 
                         else 
                           display(Double.parseDouble(st)/100);  /*输入%,使当前显示的值除于100*/ 
                        }  
                    }   
                }    
           } 
        
     private void compute(String s) 
      {if(s.equals("=")) 
         {if(operation.equals(""))    
              return;                  
         }              
       double data1=Double.parseDouble(pnum); 
       double  data2=Double.parseDouble(Resultarea.getText());          
       Count count2=new Count(data1,data2);    /*加减乘除计算*/ 
       if(operation.equals("+")) 
          display((count2.plus()));                        
       else      
          {if(operation.equals("-"))  
              display((count2.minus()));           
           else 
              {if(operation.equals("*")) 
                 display((count2.multiply())); 
               else 
                 if(operation.equals("/"))     
                   {if(data2==0) 
                         {Resultarea.setText("除数不能为0");    
                       operation=""; 
                       pnum="";   
                       return;                    
                         } 
                       else 
                         display((count2.divide()));      
                   }      
               } 
          }             
       operation="";  /*符号为当前符*/ 
       pnum=Resultarea.getText();/*运算数为当前文本数*/               
     }   
             
      public void display(double result)   /*显示输出方法*/ 
       {int a=(int)result; 
        if(a==result) 
           Resultarea.setText(String.valueOf(a)); 
        else 
           Resultarea.setText(String.valueOf(result)); 
        if(Resultarea.getText().equals("NaN")) 
          Resultarea.setText("输入函数无效");    
       }      
           
      private JPanel TextPanel;   /*文本框棉板*/ 
      private JTextField Resultarea;  /*文本框*/ 
      private JPanel ControlPanel;  /*控制键键面板*/ 
      private JPanel KeyPanel;      /*数字键和运算符键面板*/ 
      private Font font1=new Font("Dialog",0, 10);  /*控制键字体*/ 
      private Font font2 = new Font("Dialog",0,10); /*数字键和符号键字体*/  
      private String  pnum="";   /*前操作数*/ 
      private boolean isNew=true; /*控制是否是新数*/   
      private String operation="";    /*运算符*/ 
     } 
      
      
     class tester  /*测试类*/ 

      public static void main(String[] args) 
      { 
        new calculation(); 
      } 
    }    
      

  9.   

    正在学java,以前HTML的做过~!COPY研究下!
      

  10.   

    貌似大学时我们学的VFP,老师让我们用VFP写计算器,后来妹妹大学时老师让他们用C语言来写计算器,看来大学的老师很喜欢计算器哟。建议楼主参考别人的思想自己动手来写一个,这样能提高自己的水平。