java高扩展计算器

来源:互联网 发布:谷歌搜索引擎算法 编辑:程序博客网 时间:2024/05/16 10:20
image

次计算器可以随意增加按钮,且不影响其它的按钮,如需增加更多的计算按钮只需要修改Answer2.java中的部分代码即可:

switch(ch1)        {        case "=":                         num =  Double.parseDouble(ch[i-1]);             zongnum=fflag(num,zongnum,flag);             flag = 0;                         break;        case "+":                         num =  Double.parseDouble(ch[i-1]);                                      zongnum=fflag(num,zongnum,flag);             flag = 1;                          break;        case "-":            num =  Double.parseDouble(ch[i-1]);                                      zongnum=fflag(num,zongnum,flag);                         flag = 2;                         break;        case "*":                num =  Double.parseDouble(ch[i-1]);                                      zongnum=fflag(num,zongnum,flag);                         flag = 3;                          break;        case "/":             num =  Double.parseDouble(ch[i-1]);                     zongnum=fflag(num,zongnum,flag);             flag = 4;                         break;        case "sqrt":             num =  Double.parseDouble(ch[i-1]);                     zongnum=fflag(num,zongnum,flag);             flag = 5;                         break;        case"del":            flag = 6;            break;//后面追加case 键值,并赋值标志变量,flag++;                    }                                        }                    return zongnum;                    }    private static double fflag(double num,double zongnum,int flag){        switch(flag){                case 0:            zongnum=num;            break;        case 1:            zongnum=zongnum+num;            break;        case 2:            zongnum=zongnum-num;            break;        case 3:            zongnum=zongnum*num;            break;        case 4:            zongnum=zongnum/num;            break;        case 5:            zongnum=Math.cbrt(zongnum);            break;        case 6:            zongnum = 0;//此处填写相应的计算代码,判断flag;                    break;        }        return zongnum;                    }

以下是源代码,有startFrame.java 和 Answer2.java 分别给出:

import java.awt.Color;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.lang.reflect.InvocationTargetException;import java.util.Vector;import javax.swing.GroupLayout;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.GroupLayout.Alignment;import javax.swing.LayoutStyle.ComponentPlacement;import javax.swing.SwingUtilities;import javax.swing.border.EmptyBorder;public class statrFrame extends JFrame implements ActionListener{    private int x,y;    private int width, height;     private JFrame jf;    private JPanel contentPane;    private JPanel panel,panel_1;    private JTextField jt;    private String str="",str1="",str2="";    private String[] strindex;        private Vector<JButton> bu = new Vector<>();    public statrFrame(int width,int height,int x,int y,String str){                this.strindex =str.split(",");        this.str = str;        this.x = x;        this.y = y;        this.width = width;        this.height=height;        jf = new JFrame("计算机");        panel = new JPanel();        panel_1 = new JPanel();        jt = new JTextField();        contentPane = new JPanel();        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));        jf.setContentPane(contentPane);        GroupLayout gl_contentPane = new GroupLayout(contentPane);        gl_contentPane.setHorizontalGroup(            gl_contentPane.createParallelGroup(Alignment.LEADING)                .addGroup(gl_contentPane.createSequentialGroup()                    .addGap(42)                    .addComponent(panel, GroupLayout.DEFAULT_SIZE, 342, Short.MAX_VALUE)                    .addGap(38))                .addComponent(panel_1, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 422, Short.MAX_VALUE)        );        gl_contentPane.setVerticalGroup(            gl_contentPane.createParallelGroup(Alignment.LEADING)                .addGroup(gl_contentPane.createSequentialGroup()                    .addComponent(panel, GroupLayout.DEFAULT_SIZE, 34, Short.MAX_VALUE)                    .addPreferredGap(ComponentPlacement.RELATED)                    .addComponent(panel_1, GroupLayout.DEFAULT_SIZE, 202, Short.MAX_VALUE))        );                                                GridLayout gd = new GridLayout(x,y,0,0);        panel_1.setLayout(gd);        jt = new JTextField();        jt.setColumns(10);        GroupLayout gl_panel = new GroupLayout(panel);        gl_panel.setHorizontalGroup(            gl_panel.createParallelGroup(Alignment.LEADING)                .addComponent(jt, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 342, Short.MAX_VALUE)        );        gl_panel.setVerticalGroup(            gl_panel.createParallelGroup(Alignment.LEADING)                .addComponent(jt, GroupLayout.PREFERRED_SIZE, 34, GroupLayout.PREFERRED_SIZE)        );        panel.setLayout(gl_panel);        contentPane.setLayout(gl_contentPane);        if(y!=0){                        gd.setHgap(y);            panel_1.setLayout(gd);        }            else                panel_1.setLayout(new GridLayout());        for(int i =0;i<strindex.length;i++){            bu.add(new JButton(strindex[i]));        }            }    public statrFrame(int width,int height,int x,String str){                this.strindex =str.split(",");        this.str = str;        this.x = x;        this.width = width;        this.height=height;                jf = new JFrame("计算机");        panel = new JPanel();        panel_1 = new JPanel();        jt = new JTextField();        contentPane = new JPanel();        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));        jf.setContentPane(contentPane);        GroupLayout gl_contentPane = new GroupLayout(contentPane);        gl_contentPane.setHorizontalGroup(            gl_contentPane.createParallelGroup(Alignment.LEADING)                .addGroup(gl_contentPane.createSequentialGroup()                    .addGap(42)                    .addComponent(panel, GroupLayout.DEFAULT_SIZE, 342, Short.MAX_VALUE)                    .addGap(38))                .addComponent(panel_1, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 422, Short.MAX_VALUE)        );        gl_contentPane.setVerticalGroup(            gl_contentPane.createParallelGroup(Alignment.LEADING)                .addGroup(gl_contentPane.createSequentialGroup()                    .addComponent(panel, GroupLayout.DEFAULT_SIZE, 34, Short.MAX_VALUE)                    .addPreferredGap(ComponentPlacement.RELATED)                    .addComponent(panel_1, GroupLayout.DEFAULT_SIZE, 202, Short.MAX_VALUE))        );                                                GridLayout gd = new GridLayout(x,y,0,0);        panel_1.setLayout(gd);        jt = new JTextField();        jt.setColumns(10);        GroupLayout gl_panel = new GroupLayout(panel);        gl_panel.setHorizontalGroup(            gl_panel.createParallelGroup(Alignment.LEADING)                .addComponent(jt, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 342, Short.MAX_VALUE)        );        gl_panel.setVerticalGroup(            gl_panel.createParallelGroup(Alignment.LEADING)                .addComponent(jt, GroupLayout.PREFERRED_SIZE, 34, GroupLayout.PREFERRED_SIZE)        );        panel.setLayout(gl_panel);        contentPane.setLayout(gl_contentPane);        if(x!=0){                        gd.setRows(x);            panel_1.setLayout(gd);        }            else                panel_1.setLayout(new GridLayout());        for(int i =0;i<strindex.length;i++){            bu.add(new JButton(strindex[i]));                    }            }        public void start(){        for(JButton button:bu){            JPanel panel_2= new JPanel();            panel_2.setLayout(new FlowLayout());            panel_1.add(panel_2);//            button.setPreferredSize(new Dimension(130, 50));            panel_2.add(button);            button.setFont(new Font("微软雅黑", Font.PLAIN, 40));            button.addActionListener(this);            jt.setFont(new Font("宋体", Font.PLAIN, 30));        }        jf.setDefaultCloseOperation(EXIT_ON_CLOSE);        jf.setSize(width, height);        jf.setVisible(true);        new Adjust().start();    }    public static void main(String[] args) {        try {            SwingUtilities.invokeAndWait(new Runnable() {                                @Override                public void run() {                    statrFrame sf=new statrFrame(500,600,5,"7,8,9,/,4,5,6,*,1,2,3,-,0,.,+,=,sqrt,->,del,abs");                    sf.start();                                    }            });        } catch (InvocationTargetException | InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }            }    @Override    public void actionPerformed(ActionEvent e) {        JButton jb =(JButton) e.getSource();                                if(jb.getText().equals("+")||jb.getText().equals("-")||jb.getText().equals("*")||jb.getText().equals("/")||jb.getText().equals("sqrt"))        {            str2=str2+",";            str2=str2+jb.getText();            str2=str2+",";                str1=str1+jb.getText();                        }        if (jb.getText().equals("="))        {                        if(Answer2.suanzhi(str2) % 1.0 == 0){                 str1 =Long.toString((long)Answer2.suanzhi(str2));                }            else{                 str1 =Double.toString(Answer2.suanzhi(str2));            }                                }                if(jb.getText().equals("1")||jb.getText().equals("2")||jb.getText().equals("3")||jb.getText().equals("4")||jb.getText().equals("5")                ||jb.getText().equals("6")||jb.getText().equals("7")||jb.getText().equals("8")||jb.getText().equals("9")                ||jb.getText().equals("0")||jb.getText().equals("."))        {                str1=str1+jb.getText();                str2=str2+jb.getText();        }        if (jb.getText().equals("del"))        {            str1 = "";        }        if(jb.getText().equals("->"))        {            str1 = str1.substring(0, str1.length()-1);        }                jt.setText(str1);            }    public  class Adjust extends Thread{        @Override        public void run() {            while(true){                jt.setPreferredSize(new Dimension(jf.getWidth()/6, jf.getHeight()/15));                            for(JButton button:bu){                                        button.setPreferredSize(new Dimension(jf.getWidth()/7, jf.getHeight()/10));                                                                }                                        }        }    }    }
public class Answer2 {        public static double  suanzhi(String str){     double zongnum=0;         double num=0;         int index=0;         int flag=0;          String s1="";          str=str+",=";                  String[] ch = str.split(",");                for(int i=0;i<ch.length;i++){            String ch1 = ch[i];                    switch(ch1)        {        case "=":                         num =  Double.parseDouble(ch[i-1]);             zongnum=fflag(num,zongnum,flag);             flag = 0;                         break;        case "+":                         num =  Double.parseDouble(ch[i-1]);                                      zongnum=fflag(num,zongnum,flag);             flag = 1;                          break;        case "-":            num =  Double.parseDouble(ch[i-1]);                                      zongnum=fflag(num,zongnum,flag);                         flag = 2;                         break;        case "*":                num =  Double.parseDouble(ch[i-1]);                                      zongnum=fflag(num,zongnum,flag);                         flag = 3;                          break;        case "/":             num =  Double.parseDouble(ch[i-1]);                     zongnum=fflag(num,zongnum,flag);             flag = 4;                         break;        case "sqrt":             num =  Double.parseDouble(ch[i-1]);                     zongnum=fflag(num,zongnum,flag);             flag = 5;                         break;        case"del":            flag = 6;            break;                    }                                        }                    return zongnum;                    }    private static double fflag(double num,double zongnum,int flag){        switch(flag){                case 0:            zongnum=num;            break;        case 1:            zongnum=zongnum+num;            break;        case 2:            zongnum=zongnum-num;            break;        case 3:            zongnum=zongnum*num;            break;        case 4:            zongnum=zongnum/num;            break;        case 5:            zongnum=Math.cbrt(zongnum);            break;        case 6:            zongnum = 0;                    break;        }        return zongnum;                    }    }
原创粉丝点击