以下是经过修改后的ScientificCalculator程序:

import javax.swing.; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List;

public class ScientificCalculator extends JFrame {

private JTextField inputField; // 输入框
private JTextArea displayArea; // 显示区域
private List<BigDecimal> storedResults; // 存储结果的列表

public ScientificCalculator() {
    setTitle("科学计算器");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new BorderLayout());

    inputField = new JTextField();
    inputField.setEditable(false);
    add(inputField, BorderLayout.NORTH);

    displayArea = new JTextArea();
    displayArea.setEditable(false);
    add(new JScrollPane(displayArea), BorderLayout.CENTER);

    JPanel buttonPanel = new JPanel(new GridLayout(5, 4));

    String[] buttons = {
            "7", "8", "9", "/",
            "4", "5", "6", "*",
            "1", "2", "3", "-",
            "0", ".", "(", "+",
            ")", "sin", "cos", "tan",
            "sqrt", "pow", "exp", "log",
            "!", "C", "MS", "MC",
            "Max", "Min", "Mean", "StdDev",
            "Sum", "Product", "=", "Clear"
    };

    for (String buttonText : buttons) {
        JButton button = new JButton(buttonText);
        button.addActionListener(new ButtonClickListener());
        buttonPanel.add(button);
    }

    add(buttonPanel, BorderLayout.SOUTH);

    storedResults = new ArrayList<>();

    pack();
    setVisible(true);
}

private void appendToInput(String text) {
    inputField.setText(inputField.getText() + text);
}

private void appendToDisplay(String text) {
    displayArea.append(text + "\n");
}

private BigDecimal evaluateExpression(String expression) {
    try {
        return new BigDecimal(expression);
    } catch (NumberFormatException e) {
        appendToDisplay("无效的表达式: " + expression);
        return null;
    }
}

private BigDecimal calculateFactorial(BigDecimal number) {
    BigDecimal result = BigDecimal.ONE;
    for (BigDecimal i = BigDecimal.ONE; i.compareTo(number) <= 0; i = i.add(BigDecimal.ONE)) {
        result = result.multiply(i);
    }
    return result;
}

private BigDecimal calculateMean(List<BigDecimal> numbers) {
    BigDecimal sum = BigDecimal.ZERO;
    for (BigDecimal number : numbers) {
        sum = sum.add(number);
    }
    return sum.divide(new BigDecimal(numbers.size()));
}

private BigDecimal calculateStandardDeviation(List<BigDecimal> numbers) {
    BigDecimal mean = calculateMean(numbers);
    BigDecimal sumOfSquaredDifferences = BigDecimal.ZERO;
    for (BigDecimal number : numbers) {
        BigDecimal difference = number.subtract(mean);
        sumOfSquaredDifferences = sumOfSquaredDifferences.add(difference.pow(2));
    }
    BigDecimal variance = sumOfSquaredDifferences.divide(new BigDecimal(numbers.size()));
    return variance.sqrt(new MathContext(128));
}

private BigDecimal calculateSum(List<BigDecimal> numbers) {
    BigDecimal sum = BigDecimal.ZERO;
    for (BigDecimal number : numbers) {
        sum = sum.add(number);
    }
    return sum;
}

private BigDecimal calculateProduct(List<BigDecimal> numbers) {
    BigDecimal product = BigDecimal.ONE;
    for (BigDecimal number : numbers) {
        product = product.multiply(number);
    }
    return product;
}

private class ButtonClickListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        String buttonText = ((JButton) e.getSource()).getText();

        if (buttonText.equals("=")) {
            String expression = inputField.getText();
            appendToDisplay(expression);

            BigDecimal result = evaluateExpression(expression);
            if (result != null) {
                storedResults.add(result);
                appendToDisplay("结果: " + result);
            }
        } else if (buttonText.equals("C")) {
            inputField.setText("");
        } else if (buttonText.equals("MS")) {
            BigDecimal result = evaluateExpression(inputField.getText());
            if (result != null) {
                storedResults.add(result);
                appendToDisplay("存储: " + result);
            }
        } else if (buttonText.equals("MC")) {
            storedResults.clear();
            appendToDisplay("已清除存储的结果");
        } else if (buttonText.equals("Max")) {
            BigDecimal max = storedResults.stream().max(BigDecimal::compareTo).orElse(null);
            if (max != null) {
                appendToDisplay("最大值: " + max);
            }
        } else if (buttonText.equals("Min")) {
            BigDecimal min = storedResults.stream().min(BigDecimal::compareTo).orElse(null);
            if (min != null) {
                appendToDisplay("最小值: " + min);
            }
        } else if (buttonText.equals("Mean")) {
            BigDecimal mean = calculateMean(storedResults);
            appendToDisplay("平均值: " + mean);
        } else if (buttonText.equals("StdDev")) {
            BigDecimal stdDev = calculateStandardDeviation(storedResults);
            appendToDisplay("标准差: " + stdDev);
        } else if (buttonText.equals("Sum")) {
            BigDecimal sum = calculateSum(storedResults);
            appendToDisplay("总和: " + sum);
        } else if (buttonText.equals("Product")) {
            BigDecimal product = calculateProduct(storedResults);
            appendToDisplay("乘积: " + product);
        } else if (buttonText.equals("Clear")) {
            displayArea.setText("");
        } else {
            appendToInput(buttonText);
        }
    }
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new ScientificCalculator();
        }
    });
}
import javaxswing;import javaawt;import javaawteventActionEvent;import javaawteventActionListener;import javamathBigDecimal;import javautilArrayList;import javautilList;public class ScientificCalculat

原文地址: http://www.cveoy.top/t/topic/hC5m 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录