一个计算器java代码

各位老师和朋友们,我今天看到了一个Java的计算器的代码,对代码做了一些优化,使算法看起来更容易理解,因为我是一人java的初学者,我把原来的代码和修改后的代码发表出来,望各位老师和同学多给指出不当之处,不吝赐教。希望在老师和朋友们的帮助下有更大提高

原来的代码:(从百度贴吧上看到的)

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Calculator //主类Calculator定义开始

{

      public static void main(String[] args)

      {

         CalculatorFrame frame=new CalculatorFrame();

         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

         frame.setVisible(true);

      }

} //主类Calculator定义结束

class CalculatorFrame extends JFrame //CalculatFrame类定义开始

{

    public CalculatorFrame()

    {

       setTitle("计算器");

       CalculatorPanel panel=new CalculatorPanel(); //实例化CalculatorPanel类成panel对象

       add(panel); //panel对象添加CalculatorFrame

       pack();

    }

} //CalculatFrame定义结束

class CalculatorPanel extends Panel // CalculatorPanel类定义开始

{

    public CalculatorPanel()

    {

       setLayout(new BorderLayout());

       result=0;

       lastCommand="=";

       start=true;

       flag=true;

       display=new JButton("0"); //实例化display按钮

       display.setEnabled(false); //将按钮设置为不可操作,只能显示字符串

       add(display,BorderLayout.NORTH); //将按钮添加到窗口最顶端

       ActionListener insert=new InsertAction(); //实例化侦听器器类InsertAction

       ActionListener command=new CommandAction(); //实例化侦听器器类CommandAction

       panel=new JPanel(); //实例化JPanel

       panel.setLayout(new GridLayout(4,5)); //panel设置布局管理器:布局为45列从左向右添加20个按钮

       addButton("7",insert);

       addButton("8",insert);

       addButton("9",insert);

       addButton("/",command);

       addButton("清零",command);

       addButton("4",insert);

       addButton("5",insert);

       addButton("6",insert);

       addButton("*",command);

       addButton("退格",command);

       addButton("1",insert);

       addButton("2",insert);

       addButton("3",insert);

       addButton("-",command);

       addButton("sqrt",command);

       addButton("0",insert);

       addButton(".",insert);

       addButton("=",command);

       addButton("+",command);

       addButton("1/x",command);

       add(panel,BorderLayout.CENTER);

    } //CalculatorPanel类定义结束

    private void addButton(String label,ActionListener listener) addButton //方法定义开始

    {

       JButton button=new JButton(label);

       button.addActionListener(listener);

       panel.add(button);

    } //addButton方法定义结束

    private class InsertAction implements ActionListener // InsertAction事件侦听器类定义开始

    {

       public void actionPerformed(ActionEvent event)

       {

          String input=event.getActionCommand();

          if(start&&flag)

          {

             display.setText("");

             start=false;

          }

          if(flag)

          display.setText(display.getText()+input);

       }

    } //InsertAction事件侦听器类定义结束

    private class CommandAction implements ActionListener // CommandAction事件侦听器类定义开始

    {

        public void actionPerformed(ActionEvent event)

        {

        String command=event.getActionCommand();

  if(command.equals("清零"))

  {

            display.setText("0");

            start=true;

            flag=true;

            command="=";

 }

        else

        if(start&&flag)

        {

           if(command.equals("-"))

           {

              display.setText(command);

              start=false;

           }

           else

           if((command.equals("1/x")||command.equals("sqrt"))&&flag)

              calculate(Double.parseDouble(display.getText()),command);

           else

             if(flag)

                lastCommand=command;

        }

        else

        {

   if(command.equals("退格")&&flag)

   {

    String s=display.getText();

    char[] s1=s.toCharArray();

    if(s.length()>=2)

    {

     String s2=new String(s1,0,s.length()-1);

     display.setText(s2);

    }

    else

    {

        display.setText("0");

        start=true;

       }

             }

             else  if(flag)

             {

                calculate(Double.parseDouble(display.getText()),command);

 

                  lastCommand=command;

                start=true;

         }

        }

}

} //CommandAction事件侦听器类定义结束

public void calculate(double x,String command) // calculate方法定义开始

{

   if(lastCommand.equals("+"))   result+=x;

   else if(lastCommand.equals("-"))   result-=x;

   else if(lastCommand.equals("/"))

   {

    if(x!=0)

      result/=x;

    else

    {

       display.setText("除数不能为0");

       start=false;

       flag=false;

       return;

       }

   }

   else if(lastCommand.equals("*"))   result*=x;

   else if(command.equals("1/x"))

   {

    if(x!=0)

         result=1/x;

       else

    {

       display.setText("除数不能为0");

       start=false;

       flag=false;

       return;

       }

   }

   else if(command.equals("sqrt"))

   {

    if(x>=0)

      result=Math.sqrt(x);

    else

    {

      display.setText("函数输入无效");

      start=false;

      flag=false;

      return;

       }

   }

   else if(lastCommand.equals("="))   result=x;

   display.setText(""+result);

} //calculate方法定义结束

  private JButton display; //声明按钮

  private JPanel panel; //声明面板

  private double result; //声明结果变量result

  private String lastCommand; //声明字符串 lastCommand

  private boolean start;

  private boolean flag;

}

改动后的代码:(CommandAction事件侦听器类定义改动了,其他地方没改)

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

 

public class Calculator

{

      public static void main(String[] args)

      {

         CalculatorFrame frame=new CalculatorFrame();

         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

         frame.setVisible(true);

      }

}

 

class CalculatorFrame extends JFrame

{

    public CalculatorFrame()

    {

       setTitle("计算器");

       CalculatorPanel panel=new CalculatorPanel();

       add(panel);

       pack();

    }

}

 

class CalculatorPanel extends Panel

{

    public CalculatorPanel()

    {

       setLayout(new BorderLayout());

 

       result=0;

       lastCommand="=";

       start=true;

       flag=true;

 

       display=new JButton("0");

       display.setEnabled(false);

       add(display,BorderLayout.NORTH);

 

       ActionListener insert=new InsertAction();

       ActionListener command=new CommandAction();

 

       panel=new JPanel();

       panel.setLayout(new GridLayout(4,5));

 

       addButton("7",insert);

       addButton("8",insert);

       addButton("9",insert);

       addButton("/",command);

       addButton("清零",command);

 

       addButton("4",insert);

       addButton("5",insert);

       addButton("6",insert);

       addButton("*",command);

       addButton("退格",command);

 

       addButton("1",insert);

       addButton("2",insert);

       addButton("3",insert);

       addButton("-",command);

       addButton("sqrt",command);

 

       addButton("0",insert);

       addButton(".",insert);

       addButton("=",command);

       addButton("+",command);

       addButton("1/x",command);

 

       add(panel,BorderLayout.CENTER);

    }

    private void addButton(String label,ActionListener listener)

    {

       JButton button=new JButton(label);

       button.addActionListener(listener);

       panel.add(button);

    }

    private class InsertAction implements ActionListener

    {

       public void actionPerformed(ActionEvent event)

       {

          String input=event.getActionCommand();

          if(start&&flag)

          {

             display.setText("");

             start=false;

          }

          if(flag)

          display.setText(display.getText()+input);

       }

    }

    private class CommandAction implements ActionListener

    {

        public void actionPerformed(ActionEvent event)

        {

        String command=event.getActionCommand();

 

  if(command.equals("清零"))

  {

            display.setText("0");

            start=true;

            flag=true;

            lastCommand="=";

 }

        else

        {

        if(flag){

             if(start){

                if(command.equals("-"))

                   {

                      display.setText(command);

                      start=false;

                   }

                else{

                    if((command.equals("1/x")||command.equals("sqrt")))

                           {calculate(Double.parseDouble(display.getText()),command);

                           start=true;}

                        else 

                     

                         lastCommand=command;

                }

             }

             else{

                if(command.equals("退格"))

                   {

                    String s=display.getText();

                    char[] s1=s.toCharArray();

                    if(s.length()>=2)

                    {

                     String s2=new String(s1,0,s.length()-1);

                     display.setText(s2);

                    }

                   else

                    {

                        display.setText("0");

                        start=true;

                       }

 

             }

                else{

                    calculate(Double.parseDouble(display.getText()),command);

 

                        lastCommand=command;

                        start=true;

                }

        }

        }

       

    }

 }

}

public void calculate(double x,String command)

{

   if(lastCommand.equals("+"))   result+=x;

   else if(lastCommand.equals("-"))   result-=x;

   else if(lastCommand.equals("/"))

   {

    if(x!=0)

      result/=x;

    else

    {

       display.setText("除数不能为0");

       start=false;

       flag=false;

       return;

       }

   }

   else if(lastCommand.equals("*"))   result*=x;

   else if(command.equals("1/x"))

   {

    if(x!=0)

         result=1/x;

       else

    {

       display.setText("除数不能为0");

       start=false;

       flag=false;

       return;

       }

 

   }

   else if(command.equals("sqrt"))

   {

    if(x>=0)

      result=Math.sqrt(x);

    else

    {

      display.setText("函数输入无效");

      start=false;

      flag=false;

      return;

       }

   }

   else if(lastCommand.equals("="))   result=x;

 

   display.setText(""+result);

}

  private JButton display;

  private JPanel panel;

  private double result;

  private String lastCommand;

  private boolean start;

  private boolean flag;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值