圖形界面科學(xué)計(jì)算器
功能:用戶界面模擬真實(shí)計(jì)算器(具體可參考手機(jī)計(jì)算器APP),顯示0~9按鍵、+、-、*、/運(yùn)算符和小數(shù)點(diǎn)、=、(),按下對應(yīng)按鍵,算式區(qū)域(可用Label組件)顯示用戶輸入的內(nèi)容,按等號,計(jì)算結(jié)果并顯示。
要求:
1.采用圖形用戶界面
2.正常輸入算式,計(jì)算出正確的結(jié)果
編程提示:
- 編寫計(jì)算器類,該類中有計(jì)算方法(calculate(String str)),該方法的參數(shù)為輸入的四則混合運(yùn)算的字符串,功能是將字符串表達(dá)式計(jì)算出結(jié)果(具體算法,需要數(shù)據(jù)結(jié)構(gòu)課程中,“?!辈糠值氖纠绦?,注意數(shù)據(jù)類型需要轉(zhuǎn)化為浮點(diǎn)型。需要創(chuàng)建運(yùn)算符和運(yùn)算數(shù)棧,然后根據(jù)掃描的字符串決定進(jìn)、出棧操作),網(wǎng)絡(luò)上可查到示例程序。
2.創(chuàng)建圖形用戶界面,布局可選擇GridLayer或Box布局管理器,添加按鍵均為JButton組件。 - 在所有創(chuàng)建的按鍵(JButton對象)上增加事件偵聽,對鼠標(biāo)事件響應(yīng)。對所有按鍵均可增加同一類事件監(jiān)聽器類實(shí)例,根據(jù)按鍵顯示不同(用getText()方法獲?。?,除等號外,均直接將按鍵文本加入到用于輸出結(jié)果的Label組件中(在自定義的事件監(jiān)聽器類中,可設(shè)置一個(gè)Label成員變量,在實(shí)例化對象時(shí),從事件觸發(fā)處把Label組件賦值給該變量,可實(shí)現(xiàn)在監(jiān)聽響應(yīng)中操作該組件的文本內(nèi)容)
擴(kuò)展:
(1)模擬計(jì)算器的外觀,提供顯示歷史記錄,用來顯示輸入的表達(dá)式等
這是一個(gè)比較復(fù)雜的項(xiàng)目,需要結(jié)合圖形界面和計(jì)算邏輯。下面是一個(gè)簡單的示例代碼,基于Java Swing實(shí)現(xiàn)了一個(gè)圖形界面科學(xué)計(jì)算器:文章來源:http://www.zghlxwxcb.cn/news/detail-776542.html
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CalculatorGUI extends JFrame {
private JLabel resultLabel;
private StringBuilder expression;
public CalculatorGUI() {
setTitle("Calculator");
setSize(300, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
expression = new StringBuilder();
resultLabel = new JLabel("0");
resultLabel.setHorizontalAlignment(JLabel.RIGHT);
resultLabel.setFont(new Font("Arial", Font.BOLD, 24));
JPanel buttonPanel = new JPanel(new GridLayout(5, 4));
String[] buttonLabels = {
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "-",
"0", ".", "=", "+",
"(", ")", "C", "DEL"
};
for (String label : buttonLabels) {
JButton button = new JButton(label);
button.addActionListener(new ButtonClickListener());
buttonPanel.add(button);
}
add(resultLabel, BorderLayout.NORTH);
add(buttonPanel, BorderLayout.CENTER);
}
private class ButtonClickListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String buttonText = ((JButton) e.getSource()).getText();
switch (buttonText) {
case "=":
calculateResult();
break;
case "C":
clearExpression();
break;
case "DEL":
deleteLastCharacter();
break;
default:
appendToExpression(buttonText);
break;
}
}
private void calculateResult() {
try {
double result = calculate(expression.toString());
resultLabel.setText(Double.toString(result));
} catch (Exception ex) {
resultLabel.setText("Error");
}
}
private double calculate(String expression) {
// 這里使用你提到的棧的算法來計(jì)算表達(dá)式的結(jié)果
// 可以使用現(xiàn)有的算法或自行實(shí)現(xiàn)
// 返回計(jì)算結(jié)果
return 0.0;
}
private void clearExpression() {
expression.setLength(0);
resultLabel.setText("0");
}
private void deleteLastCharacter() {
if (expression.length() > 0) {
expression.deleteCharAt(expression.length() - 1);
resultLabel.setText(expression.toString());
}
}
private void appendToExpression(String text) {
expression.append(text);
resultLabel.setText(expression.toString());
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
CalculatorGUI calculatorGUI = new CalculatorGUI();
calculatorGUI.setVisible(true);
});
}
}
這個(gè)示例實(shí)現(xiàn)了一個(gè)簡單的科學(xué)計(jì)算器,具備基本的加減乘除和括號功能,并且能夠把輸入的表達(dá)式計(jì)算出結(jié)果并顯示在界面上。你可以根據(jù)自己的需求進(jìn)行擴(kuò)展,添加歷史記錄等功能。請注意,這只是一個(gè)簡單的示例,實(shí)際開發(fā)中還需要考慮更多的細(xì)節(jié)和異常處理。
要實(shí)現(xiàn)加減乘除的功能,你可以在calculate方法中使用棧來計(jì)算表達(dá)式的結(jié)果。下面是一個(gè)完善了加減乘除功能的示例代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-776542.html
import java.util.Stack;
public class Calculator {
public static double calculate(String expression) {
// 移除表達(dá)式中的空格
expression = expression.replaceAll("\\s+", "");
// 創(chuàng)建運(yùn)算數(shù)棧和運(yùn)算符棧
Stack<Double> operandStack = new Stack<>();
Stack<Character> operatorStack = new Stack<>();
for (int i = 0; i < expression.length(); i++) {
char ch = expression.charAt(i);
// 如果是數(shù)字,解析整個(gè)數(shù)字并入棧
if (Character.isDigit(ch) || ch == '.') {
StringBuilder operand = new StringBuilder();
while (i < expression.length() && (Character.isDigit(expression.charAt(i)) || expression.charAt(i) == '.')) {
operand.append(expression.charAt(i));
i++;
}
i--;
operandStack.push(Double.parseDouble(operand.toString()));
}
// 如果是運(yùn)算符
else if (isOperator(ch)) {
// 如果運(yùn)算符棧不為空且棧頂運(yùn)算符優(yōu)先級大于等于當(dāng)前運(yùn)算符,則先進(jìn)行計(jì)算
while (!operatorStack.isEmpty() && hasPrecedence(operatorStack.peek(), ch)) {
double operand2 = operandStack.pop();
double operand1 = operandStack.pop();
char operator = operatorStack.pop();
double result = performOperation(operator, operand1, operand2);
operandStack.push(result);
}
// 將當(dāng)前運(yùn)算符入棧
operatorStack.push(ch);
}
// 如果是左括號,直接入棧
else if (ch ==
到了這里,關(guān)于圖形界面科學(xué)計(jì)算器 功能:用戶界面模擬真實(shí)計(jì)算器(具體可參考手機(jī)計(jì)算器APP),顯示0~9按鍵、+、-、*、/運(yùn)算符和小數(shù)點(diǎn)、=、(),按下對應(yīng)按鍵,算式區(qū)域(可用Label組件)顯示用戶輸入的內(nèi)容,的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!