import javaxswing;import javaawt;import javaawteventActionEvent;import javaawteventActionListener;import javamathBigDecimal;import javautilArrayList;import javautilList;public class ScientificCalculat
以下是经过修改后的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();
}
});
}
原文地址: http://www.cveoy.top/t/topic/hC5m 著作权归作者所有。请勿转载和采集!