永发信息网

Java计算器算不出答案

答案:1  悬赏:0  手机版
解决时间 2021-02-06 22:39
  • 提问者网友:niaiwoma
  • 2021-02-06 01:47
http://pan.baidu.com/s/1mhHDvXu
麻烦会的帮我改一改
最佳答案
  • 五星知识达人网友:白昼之月
  • 2021-02-06 03:12
package test;
import java.awt.BorderLayout;
import java.awt.Color;
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 Calculator extends JFrame implements ActionListener{     //建一个Calculator类继承JFrame实现ActionListener
    public static void main (String args[]){
        Calculator calculator=new Calculator();     //创建对象calculator
        calculator.setVisible(true);               //窗口可见
        calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //关闭图标后结束程序
    }
    String keys []={"7","8","9","/","sqrt","4","5","6","*","-","1","2","3","+","0","=",".","八进制","十六进制"};//表示计算器的键的名字
    String command []={"backspace","C"};//功能键
    JButton KEYS []=new JButton[keys.length];//创建键对象
    JButton COMMAND[]=new JButton[command.length];//功能键对象
    static JTextField resultSet=new JTextField();//建一个文本框
    double resultNum;        //结果
    String operator="";//运算符  <---------------------------
    public Calculator() {//    构造函数
        super();      
        init();//初始化计算器
        this.setBackground(Color.WHITE);//this代表用当前构造方法创建的对象
        this.setTitle("简单计算器");    //窗口标题
        this.setLocation(500, 300);   //窗口大小
        this.pack();    //使组件大小合适    
    }
    void init() {      //初始化计算器
        resultSet.setHorizontalAlignment(JTextField.RIGHT);     //设置文本框内容向右对齐
        resultSet.setBackground(Color.WHITE);           //设置文本框背景颜色
        JPanel keysPanel=new JPanel();//创建一个面板
        keysPanel.setLayout(new GridLayout(4,5,3,3)); //设置面板的布局为网格型
        for (int i=0;i<keys.length;i++) {      //把数字键和符号键设为按钮
            KEYS[i]=new JButton(keys[i]);
            keysPanel.add(KEYS[i]);            //把按钮加到面板中
//            KEYS[i].setBackground(Color.BLACK);        //设置背景颜色    
        }
        JPanel comPanel=new JPanel();       //创建命令键面板
        comPanel.setLayout(new GridLayout(1,2,3,3));//设置面板布局为网格型 
        for(int i=0;i<command.length;i++) {    //把命令键设置为按钮
            COMMAND[i]=new JButton(command[i]);
            comPanel.add(COMMAND[i]);          //把按钮放到面板上
//            COMMAND[i].setBackground(Color.BLACK);   //设置背景颜色
        }
        JPanel pane=new JPanel();      //创建面板
        pane.setLayout(new BorderLayout());  //面板布局为区域型
        pane.add(comPanel,BorderLayout.NORTH);     //把命令面板加入到大面板上
        pane.add(keysPanel,BorderLayout.CENTER);        //把数字键面板加到大面板
        getContentPane().setLayout(new BorderLayout());     //设置底层容器的布局为区域型
        getContentPane().add(resultSet,BorderLayout.NORTH);   //把文本框放到北面
        getContentPane().add(pane,BorderLayout.CENTER);    //把大面板放到中央
        for(int i=0;i<keys.length;i++){
            KEYS[i].addActionListener(this);//为按钮添加监听器
        }
        for(int i=0;i<command.length;i++){
            COMMAND[i].addActionListener(this);   
        }    
    }
    //处理事件     
    public void actionPerformed(ActionEvent e){  
        String lable=e.getActionCommand();
        if(lable.equals("backspace")){      //如果命令为backspace
            backspace();
        }
        else if (lable.equals("C")){     //如果命令为C
            Clear();
        }
        else if (Character.isDigit(lable.charAt(0))) {       //<---------------
            if(resultSet.getText().equals("0")){
                resultSet.setText("");
            }
            resultSet.setText(resultSet.getText()+lable);
        }
        else if (lable.equals(".")){
            point();
        }
        else    if(lable.equals("sqrt")){
            sqrt();
        }
        else     if(lable.equals("八进制")){
            int n=Integer.parseInt(resultSet.getText());
            resultSet.setText(Integer.toOctalString(n));
        }
        else     if(lable.equals("十六进制")){
            int n=Integer.parseInt(resultSet.getText());
            resultSet.setText(Integer.toHexString(n));
        }
        else if (lable.equals("=")){
            equal();
        }
        else {
            doOperation();
            resultSet.setText("");
            operator=lable;
        }
    }
    void point() {
        String s=resultSet.getText();
        if(s.indexOf(".")==-1){
            resultSet.setText(s+".");
        }
    }
    void equal() {
        doOperation();
        resultSet.setText(""+resultNum);
        operator="";
    }
    void doOperation() {
        double m=Double.parseDouble(resultSet.getText());
        if(operator.equals("")){
            resultNum=m;
        }
        if(operator.equals("+")){
            resultNum+=m;
        }
        if(operator.equals("-")){
            resultNum-=m;
        }
        if(operator.equals("*")){
            resultNum*=m;
        }
        if(operator.equals("/")){
            resultNum/=m;
        }
    }
    //方法    
    void sqrt() {       //开方
        double m=Double.parseDouble(resultSet.getText());
        if(m<0){
            resultSet.setText("负数不能开根号");
        }
        else {
            resultSet.setText(""+Math.sqrt(m));
        }
    }
    void Clear() {     //清零
        resultSet.setText("0");
    }
    void backspace() {    //退格
        String text =resultSet.getText();
        if (text.length()>0){
            resultSet.setText(text.substring(0, text.length()-1));//将文本最后一个字符删除        
        }
        else if (text.length()==0){
            resultSet.setText("0");
        }
    }    
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯