简单计算器

    xiaoxiao2025-06-05  40

    在学了图形界面和练了一段ACM之后,挑战一下自己,决定写一个简单的计算器。

    经过一下午的纠结和查过之后,终于写出来了^_^,但是只实现了简单的加减乘除,等以后水平高了,再增加功能。

    代码实现:

    CalculatorDemo类:

    <span style="font-family:Times New Roman;font-size:14px;">package homework; import java.awt.BorderLayout; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class CalculatorDemo extends JFrame implements ActionListener { private JTextField xstfd; private String[] anjian = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "+", "-", "*", "/", "=", "." }; private JButton cbtn, anbtn,xiaozifu; private boolean ischeng, ischu, isjia, isjian; private String left = ""; private String right = ""; private String xianshi = ""; private boolean iswan; private boolean jiafirst = true; private boolean jianfirst = true; private boolean chengfirst = true; private boolean chufirst = true; private boolean isjisuan=false; public CalculatorDemo() { this.setTitle("计算器"); this.setBounds(200, 200, 400, 300); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setLayout(new GridLayout(2, 1)); JPanel p1 = new JPanel(); Font font = new Font("黑体", Font.BOLD, 20); xstfd = new JTextField(20); xstfd.setEditable(false); xstfd.setHorizontalAlignment(JTextField.RIGHT); this.getContentPane().add(p1,BorderLayout.NORTH); p1.add(xstfd); cbtn = new JButton("C"); cbtn.addActionListener(this); cbtn.setFont(font); p1.add(cbtn); xiaozifu=new JButton("←"); xiaozifu.addActionListener(this); xiaozifu.setFont(font); p1.add(xiaozifu); JPanel p2 = new JPanel(); p2.setLayout(new GridLayout(4, 5)); for (int i = 0; i < anjian.length; i++) { anbtn = new JButton(anjian[i]); anbtn.addActionListener(this); anbtn.setFont(font); p2.add(anbtn); } this.getContentPane().add(p2,BorderLayout.CENTER); this.setVisible(true); } public static void main(String[] args) { new CalculatorDemo(); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == cbtn) { xstfd.setText(""); jiafirst = true; jianfirst = true; chengfirst = true; chufirst = true; }else if(e.getSource()==xiaozifu){ String yuanzifu=xstfd.getText(); String xianzifu=""; if(yuanzifu!=null&&yuanzifu.length()>0){ for(int i=0;i<yuanzifu.length()-1;i++){ char ch=yuanzifu.charAt(i); xianzifu+=ch; } } xstfd.setText(xianzifu); } else { String dedao = e.getActionCommand(); int i; boolean isset = false; if (!(dedao.equals("="))) { if (iswan) { iswan = false; if (!(dedao.equals("+") || dedao.equals("-") || dedao.equals("*") || dedao.equals("/"))) { xstfd.setText(dedao); isset = true; } } if((dedao=="+"||dedao=="-"||dedao=="*"||dedao=="/")&&isjisuan){ jisuan(""); iswan = false; xianshi = xstfd.getText() + dedao; } else { xianshi = xstfd.getText() + dedao; } if (!isset) { xstfd.setText(xianshi); } if (dedao.equals("+")) { isjia = true; isjisuan=true; } if (dedao.equals("-")) { isjian = true; isjisuan=true; } if (dedao.equals("*")) { ischeng = true; isjisuan=true; } if (dedao.equals("/")) { ischu = true; isjisuan=true; } } if (dedao.equals("=")) { String lastnum = xstfd.getText(); jisuan(lastnum); } } } public void jisuan(String lastnum) { iswan = true; int k; for (k = 0; k < xianshi.length(); k++) { char ch = xianshi.charAt(k); if (ch == '+' || ch == '*' || ch == '/' || (k > 0 && ch == '-')) { break; } if ((ch >= '0' && ch <= '9') || ch == '.' || ch == '-') { left = left + ch; } } for (int j = k + 1; j < xianshi.length(); j++) { char ch = xianshi.charAt(j); if (ch >= '0' && ch <= '9') { right += ch; } } float a = 0; float b = 0; if (left != "" && left.length() > 0) { a = Float.parseFloat(left); } if (right != null && right.length() > 0) { b = Float.parseFloat(right); } float jieguo = 0; if (isjia) { jieguo = a + b; xstfd.setText("" + jieguo); isjia = false; } else if (isjian) { jieguo = a - b; xstfd.setText("" + jieguo); isjian = false; } else if (ischeng) { jieguo = a * b; xstfd.setText("" + jieguo); ischeng = false; } else if (ischu) { // if (b == 0) { // xstfd.setText("除数不能为0"); // return; // } jieguo = a / b; xstfd.setText("" + jieguo); ischu = false; } else { xstfd.setText(lastnum); } left = ""; right = ""; isjisuan=false; } } </span>

    运行结果:

    转载请注明原文地址: https://ju.6miu.com/read-1299636.html
    最新回复(0)