Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaGUI科学计算器_Java_Calculator - Fatal编程技术网

JavaGUI科学计算器

JavaGUI科学计算器,java,calculator,Java,Calculator,我正在尝试用Java编写一个科学计算器。然而,我很难真正让程序进行计算。您可以在下面的代码中看到,我已经设法让GUI使用GUI上打印的数字。我还向“+”按钮添加了功能,以便首先测试它,看看程序是否工作 public class Gui extends JFrame { private static JButton [] button = new JButton[36]; private static TextField tf; private JPanel panel;

我正在尝试用Java编写一个科学计算器。然而,我很难真正让程序进行计算。您可以在下面的代码中看到,我已经设法让GUI使用GUI上打印的数字。我还向“+”按钮添加了功能,以便首先测试它,看看程序是否工作

public class Gui extends JFrame {
    private static JButton [] button = new JButton[36];
    private static TextField tf;
    private JPanel panel;
    private JPanel panel1;



public Gui(){
    super("Scientific Calculator");
    panel = new JPanel();
    panel1 = new JPanel(new GridLayout(0,4));

    tf = new TextField(20);
    tf.setEditable(false);
    panel.add(tf);

    button[0]=new JButton("Rad/Deg");
    button[1]=new JButton("x!");
    button[2]=new JButton("sqrt");
    button[3]=new JButton("sin");
    button[4]=new JButton("cos");
    button[5]=new JButton("tan");
    button[6]=new JButton("ln");
    button[7]=new JButton("log");
    button[8]=new JButton("1/x");
    button[9]=new JButton("e^x");
    button[10]=new JButton("x^2");
    button[11]=new JButton("y^x");
    button[12]=new JButton("|x|");
    button[13]=new JButton("pi");
    button[14]=new JButton("e");

    button[15]=new JButton("C");
    button[16]=new JButton("(");
    button[17]=new JButton(")");
    button[18]=new JButton("%");
    button[19]=new JButton("/");
    button[20]=new JButton("7");
    button[21]=new JButton("8");
    button[22]=new JButton("9");
    button[23]=new JButton("*");
    button[24]=new JButton("4");
    button[25]=new JButton("5");
    button[26]=new JButton("6");
    button[27]=new JButton("-");
    button[28]=new JButton("1");
    button[29]=new JButton("2");
    button[30]=new JButton("3");
    button[31]=new JButton("+");
    button[32]=new JButton(".");
    button[33]=new JButton("0");
    button[34] =new JButton("+/-");
    button[35] =new JButton("=");



    for(int i = 0; i<button.length;i++){
        panel1.add(button[i]);
    }


    panel.add(panel1);
    add(panel);

    HandlerClass handler = new HandlerClass();
    for(int i = 0; i<button.length;i++){
        button[i].addActionListener(handler);
    }

}
private class HandlerClass implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {
        double num1 = 0,num2;

        String alreadyDisplayed = tf.getText();
        String toDisplay = "";

        if(e.getSource()==button[33]){
            alreadyDisplayed = tf.getText();
            toDisplay = alreadyDisplayed + (button[33].getText());
            tf.setText(toDisplay);
        }
        if(e.getSource()==button[28]){
             alreadyDisplayed = tf.getText();
             toDisplay = alreadyDisplayed + (button[28].getText());
            tf.setText(toDisplay);
        }
        if(e.getSource()==button[29]){
            alreadyDisplayed = tf.getText();
            toDisplay = alreadyDisplayed + (button[29].getText());
            tf.setText(toDisplay);
        }
        if(e.getSource()==button[30]){
            alreadyDisplayed = tf.getText();
            toDisplay = alreadyDisplayed + (button[30].getText());
            tf.setText(toDisplay);
        }
        if(e.getSource()==button[24]){
            alreadyDisplayed = tf.getText();
            toDisplay = alreadyDisplayed + (button[24].getText());
            tf.setText(toDisplay);
        }
        if(e.getSource()==button[25]){
            alreadyDisplayed = tf.getText();
            toDisplay = (button[25].getText());
            tf.setText(toDisplay);
        }
        if(e.getSource()==button[26]){
            alreadyDisplayed = tf.getText();
            toDisplay = alreadyDisplayed + (button[26].getText());
            tf.setText(toDisplay);
        }
        if(e.getSource()==button[20]){
            alreadyDisplayed = tf.getText();
            toDisplay = alreadyDisplayed + (button[20].getText());
            tf.setText(toDisplay);
        }
        if(e.getSource()==button[21]){
            alreadyDisplayed = tf.getText();
            toDisplay = alreadyDisplayed + (button[21].getText());
            tf.setText(toDisplay);
        }
        if(e.getSource()==button[22]){
            alreadyDisplayed = tf.getText();
            toDisplay = alreadyDisplayed + (button[22].getText());
            tf.setText(toDisplay);
        }
        if(e.getSource()==button[31]){
            alreadyDisplayed = tf.getText();
            toDisplay = alreadyDisplayed + (button[31].getText());
            tf.setText(toDisplay);
        }
公共类Gui扩展JFrame{
私有静态JButton[]按钮=新JButton[36];
私有静态文本字段tf;
私人JPanel小组;
私人JPanel小组1;
公共图形用户界面(){
超级(“科学计算器”);
panel=新的JPanel();
panel1=新JPanel(新网格布局(0,4));
tf=新文本字段(20);
tf.setEditable(false);
小组委员会.增补(tf);
按钮[0]=新的JButton(“Rad/Deg”);
按钮[1]=新的JButton(“x!”);
按钮[2]=新的JButton(“sqrt”);
按钮[3]=新的JButton(“sin”);
按钮[4]=新的JButton(“cos”);
按钮[5]=新的按钮(“棕色”);
按钮[6]=新的JButton(“ln”);
按钮[7]=新的JButton(“日志”);
按钮[8]=新的JButton(“1/x”);
按钮[9]=新的JButton(“e^x”);
按钮[10]=新的JButton(“x^2”);
按钮[11]=新的JButton(“y^x”);
按钮[12]=新的JButton(“| x |”);
按钮[13]=新的JButton(“pi”);
按钮[14]=新的JButton(“e”);
按钮[15]=新的JButton(“C”);
按钮[16]=新的JButton(“”);
按钮[17]=新的JButton(“”);
按钮[18]=新的JButton(“%”);
按钮[19]=新的JButton(“/”);
按钮[20]=新的JButton(“7”);
按钮[21]=新的JButton(“8”);
按钮[22]=新的JButton(“9”);
按钮[23]=新的JButton(“*”);
按钮[24]=新的JButton(“4”);
按钮[25]=新的JButton(“5”);
按钮[26]=新的JButton(“6”);
按钮[27]=新的JButton(“-”);
按钮[28]=新的JButton(“1”);
按钮[29]=新的JButton(“2”);
按钮[30]=新的JButton(“3”);
按钮[31]=新的JButton(“+”);
按钮[32]=新的JButton(“.”);
按钮[33]=新的JButton(“0”);
按钮[34]=新的JButton(“+/-”);
按钮[35]=新的JButton(“=”);

对于(int i=0;i为什么不将值存储到字符串中(更易于操作),然后稍后将其解析为算术表达式?例如

人员按下按钮“(”、“sin(8)”、“+”、“8”、“”、“+”、“1”、“=”

这很快计算为一个简单的字符串(sin(8)+8)+1=

您可以解析字符串并查找需要解析的明显内容(例如,查找sin,然后递归解析括号之间的所有内容)。使用数学函数计算复杂表达式,并解析简单表达式

我可能会建议您编写自己的函数来解决复杂的表达式-类似于此

public double solveSin(String inside) {
  if(NumberUtils.isNumber(inside)) {
    return Math.sin(Double.parseDouble(inside);
  } else {
    //Call back to original function to direct based on inputs
    return Math.sin(parseEquation(inside));
  }
}

尝试在按下按钮后立即生成运算符树。在按下更多按钮时继续更新该树。解析整个方程式字符串可能是一项困难的任务

用户按Enter键后,解算运算符树。这有很多好处。 1) 您不必一次解析一个操作数/运算符。 2) 正确的顺序树遍历将考虑BODMAS规则和其他数学运算符的本质。
3) 顺序遍历将为您提供用户键入的原始方程式,您可以将其显示出来。

首先创建数组是
double[]arr=new double[10]
为什么要将i设置为double,如果使用它时总是将其转换为int?只要在for循环中将其声明为int即可。我知道这是一个愚蠢的错误,我一分钟前就注意到了。将立即进行更改不要尝试一次做这么多。我将从一个最简单的加法、减法、乘法、除法计算器开始,然后添加额外的专长在以前的工作中,按钮[22]很难编码和维护。我会将按钮作为具有智能名称的单个实例变量保存。--此外,询问具体困难可能比“我正在尝试构建这个,请帮助我”更有效。
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

public class CalcGui extends JFrame {

    private JButton buttonZero;
    private JButton buttonOne;
    private JButton buttonTwo;
    private JButton buttonThree;
    private JButton buttonFour;
    private JButton buttonFive;
    private JButton buttonSix;
    private JButton buttonSeven;
    private JButton buttonEight;
    private JButton buttonNine;

    private JButton opButtonPlus;
    private JButton opButtonMinus;
    private JButton opButtonDivide;
    private JButton opButtonMultiply;
    private JButton opButtonEquals;
    private JButton opButtonClear;

    private TextField tf;

    private JPanel numButtonPanel;
    private JPanel opButtonPanel;
    private JPanel basePanel;

    public CalcGui(){
        super("Scientific Calculator");
        basePanel = new JPanel();
        numButtonPanel = new JPanel(new GridLayout(0,4));
        opButtonPanel = new JPanel(new GridLayout(0,1));

        tf = new TextField(20);
        tf.setEditable(false);
        basePanel.add(tf);

         buttonZero = new JButton("0");
         numButtonPanel.add(buttonZero);
         buttonOne = new JButton("1");
         numButtonPanel.add(buttonOne);
         buttonTwo = new JButton("2");
         numButtonPanel.add(buttonTwo);
         buttonThree = new JButton("3");
         numButtonPanel.add(buttonThree);
         buttonFour = new JButton("4");
         numButtonPanel.add(buttonFour);
         buttonFive = new JButton("5");
         numButtonPanel.add(buttonFive);
         buttonSix = new JButton("6");
         numButtonPanel.add(buttonSix);
         buttonSeven = new JButton("7");
         numButtonPanel.add(buttonSeven);
         buttonEight = new JButton("8");
         numButtonPanel.add(buttonEight);
         buttonNine = new JButton("9");
         numButtonPanel.add(buttonNine);

         basePanel.add(numButtonPanel);

        opButtonPlus = new JButton("+");
        opButtonMinus = new JButton("-");
        opButtonDivide = new JButton("/");
        opButtonMultiply = new JButton("*");
        opButtonEquals = new JButton("=");
        opButtonClear = new JButton("C");

        opButtonPanel.add(opButtonPlus);
        opButtonPanel.add(opButtonMinus);
        opButtonPanel.add(opButtonDivide);
        opButtonPanel.add(opButtonMultiply);
        opButtonPanel.add(opButtonEquals);
        opButtonPanel.add(opButtonClear);

        basePanel.add(opButtonPanel);

        add(basePanel);

        HandlerClass handler = new HandlerClass();

        buttonZero.addActionListener(handler);
        buttonOne.addActionListener(handler);
        buttonTwo.addActionListener(handler);
        buttonThree.addActionListener(handler);
        buttonFour.addActionListener(handler);
        buttonFive.addActionListener(handler);
        buttonSix.addActionListener(handler);
        buttonSeven.addActionListener(handler);
        buttonEight.addActionListener(handler);
        buttonNine.addActionListener(handler);

        opButtonPlus.addActionListener(handler);
        opButtonMinus.addActionListener(handler);
        opButtonDivide.addActionListener(handler);
        opButtonMultiply.addActionListener(handler);
        opButtonEquals.addActionListener(handler);
        opButtonClear.addActionListener(handler);

    }


    private class HandlerClass implements ActionListener{
        public void actionPerformed(ActionEvent e){
            String alreadyDisplayed = tf.getText();
            if(e.getSource()==buttonZero){
                String buttonZeroText = alreadyDisplayed + buttonZero.getText();
                tf.setText(buttonZeroText);
            }else if(e.getSource()==buttonOne){
                String buttonOneText = alreadyDisplayed + buttonOne.getText();
                tf.setText(buttonOneText);
            }else if(e.getSource()==buttonTwo){
                String buttonTwoText = alreadyDisplayed + buttonTwo.getText();
                tf.setText(buttonTwoText);
            }else if(e.getSource()==buttonThree){
                String buttonThreeText = alreadyDisplayed + buttonThree.getText();
                tf.setText(buttonThreeText);
            }else if(e.getSource()==buttonFour){
                String buttonFourText = alreadyDisplayed + buttonFour.getText();
                tf.setText(buttonFourText);
            }else if(e.getSource()==buttonFive){
                String buttonFiveText = alreadyDisplayed + buttonFive.getText();
                tf.setText(buttonFiveText);
            }else if(e.getSource()==buttonSix){
                String buttonSixText = alreadyDisplayed + buttonSix.getText();
                tf.setText(buttonSixText);
            }else if(e.getSource()==buttonSeven){
                String buttonSevenText = alreadyDisplayed + buttonSeven.getText();
                tf.setText(buttonSevenText);
            }else if(e.getSource()==buttonEight){
                String buttonEightText = alreadyDisplayed + buttonEight.getText();
                tf.setText(buttonEightText);
            }else if(e.getSource()==buttonNine){
                String buttonNineText = alreadyDisplayed + buttonNine.getText();
                tf.setText(buttonNineText);
            }else if(e.getSource()==opButtonPlus){
                String opButtonPlusText = alreadyDisplayed + opButtonPlus.getText();
                tf.setText(opButtonPlusText);
            }else if(e.getSource()==opButtonEquals){
                String opButtonEqualsText = alreadyDisplayed + opButtonEquals.getText();
                tf.setText(opButtonEqualsText);
            }else if(e.getSource()==opButtonMinus){
                String opButtonMinusText = alreadyDisplayed + opButtonMinus.getText();
                tf.setText(opButtonMinusText);
            }else if(e.getSource()==opButtonMultiply){
                String opButtonMultiplyText = alreadyDisplayed + opButtonMultiply.getText();
                tf.setText(opButtonMultiplyText);
            }else if(e.getSource()==opButtonDivide){
                String opButtonDivideText = alreadyDisplayed + opButtonDivide.getText();
                tf.setText(opButtonDivideText);
            }else if(e.getSource()==opButtonClear){
                String opButtonClearText = "";
                tf.setText(opButtonClearText);
            }


            double result;
            for(int i=0; i<alreadyDisplayed.length();i++){

                if(e.getSource()==opButtonEquals){

                    if(alreadyDisplayed.charAt(i)=='+'){
                        result = Double.parseDouble(alreadyDisplayed.substring(0,i)) + Double.parseDouble(alreadyDisplayed.substring(i+1,alreadyDisplayed.length()));
                        tf.setText(alreadyDisplayed + "=" + result);
                    }else if(alreadyDisplayed.charAt(i)=='-'){
                        result = Double.parseDouble(alreadyDisplayed.substring(0,i)) - Double.parseDouble(alreadyDisplayed.substring(i+1,alreadyDisplayed.length()));
                        tf.setText(alreadyDisplayed + "=" + result);
                    }else if(alreadyDisplayed.charAt(i)=='/'){
                        result = Double.parseDouble(alreadyDisplayed.substring(0,i)) / Double.parseDouble(alreadyDisplayed.substring(i+1,alreadyDisplayed.length()));
                        tf.setText(alreadyDisplayed + "=" + result);
                    }else if(alreadyDisplayed.charAt(i)=='*'){
                        result = Double.parseDouble(alreadyDisplayed.substring(0,i)) * Double.parseDouble(alreadyDisplayed.substring(i+1,alreadyDisplayed.length()));
                        tf.setText(alreadyDisplayed + "=" + result);
                    }
                }
            }
        }
    }
}
double []num1=new double[10];
    double []num2=new double[10];
    //double num1 = 0;
    double temp =0;
    String str[] = new String [10];
    String []str1 = new String[10];
    if(e.getActionCommand().equals("+"))
    if(e.getSource() == opButtonEquals)
        for( int i = 0; i<alreadyDisplayed.length(); i++){

            if(alreadyDisplayed.charAt(i)=='+')
             str[i] = alreadyDisplayed.substring(0,i);
             num1[i] = Double.parseDouble(str[i]);
             str1[i+1] = alreadyDisplayed.substring(i+1,alreadyDisplayed.length());
             num2[i+1] = Double.parseDouble(str1[i]);

             temp += num1[i] + num2[i+1];

            tf.setText(Double.toString(temp));

        }System.out.println(temp);
    }
}
public double solveSin(String inside) {
  if(NumberUtils.isNumber(inside)) {
    return Math.sin(Double.parseDouble(inside);
  } else {
    //Call back to original function to direct based on inputs
    return Math.sin(parseEquation(inside));
  }
}