来源于网上

摘抄了一个计算器程序,在MyEclipse上运行正常

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("Calculator");
  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("CE",command);
  
  addButton("4",insert);
  addButton("5",insert);
  addButton("6",insert);
  addButton("*",command);
  addButton("Backspace",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("CE")){
    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("Backpace") && 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;
     }
    }
   
  }
 }
 
 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;
 
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值