永发信息网

Java计算器算不出答案

答案:1  悬赏:0  手机版
解决时间 2021-02-06 22:39
http://pan.baidu.com/s/1mhHDvXu
麻烦会的帮我改一改
最佳答案
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");
        }
    }    
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
地坪风雨桥地址好找么,我有些事要过去
excel电子表格怎么做才能保护只有公式的单元
古巷道地址有知道的么?有点事想过去
观景台地址在什么地方,想过去办事
淮安森林公园西门我想知道这个在什么地方
生态系统中,磷损失的主要途径是B。A. 有机物
淘宝网上的狗狗为什么这么便宜?
四面山的气候特点,水土理化性质咋样?适合那
家惠超市地址有知道的么?有点事想过去
(1)哺乳动物体内消化食物、吸收营养物质的
青龙洞地址好找么,我有些事要过去
中国什么汽车是从外国引到中国的
靖宇县那尔轰镇农村经济管理服务中心这个地址
田园风光怎么去啊,我要去那办事
以下问题都是先化解再求值
推荐资讯
奇瑞汽车湖南三鑫直营店怎么去啊,我要去那办
海信智能手机怎样才能将号码加入黑名单
红米note如何把文件移到根目录
求部电影片名字,内容是讲女子监狱里面的事。
诚洁宾馆(许昌长葛市)地址在什么地方,我要处
北京火车站用轮椅怎样进站上车?
顺沙路19号院二区北门这个地址在什么地方,我
山东摄影家协会博山创作基地怎么去啊,有知道
你的下属喜欢到处指点他人你会怎样做求大神帮
上海去台湾旅游签注可以持商务入台证进台吗
天香包子馆我想知道这个在什么地方
2.2% 30.5% 275% 35.7% 化成最简分数
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?