From 43de6f5acb1222079908cbeeeb41c3c6025224a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E4=BD=B3=E5=AA=9B?= <2487706653@qq.com> Date: Wed, 9 Oct 2024 23:15:47 +0800 Subject: [PATCH] =?UTF-8?q?=E9=99=88=E4=BD=B3=E5=AA=9B=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E6=AC=A1=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UML.iml | 11 --- src/Calculator6218.java | 200 ---------------------------------------- src/Main.java | 15 --- 3 files changed, 226 deletions(-) delete mode 100644 UML.iml delete mode 100644 src/Calculator6218.java delete mode 100644 src/Main.java diff --git a/UML.iml b/UML.iml deleted file mode 100644 index 37cc804..0000000 --- a/UML.iml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/src/Calculator6218.java b/src/Calculator6218.java deleted file mode 100644 index 0191cb9..0000000 --- a/src/Calculator6218.java +++ /dev/null @@ -1,200 +0,0 @@ - -import javafx.application.Application; -import javafx.geometry.Insets; -import javafx.geometry.Pos; -import javafx.scene.Scene; -import javafx.scene.control.Button; -import javafx.scene.control.TextField; -import javafx.scene.layout.*; -import javafx.stage.Stage; - -import java.util.Stack; - -public class Calculator6218 extends Application { - private TextField display; - private StringBuilder currentInput = new StringBuilder(); - - public static void main(String[] args) { - launch(args); - } - - @Override - public void start(Stage primaryStage) { - VBox root = getRoot(); - Scene scene = new Scene(root, 300, 400); - primaryStage.setTitle("计算器"); - primaryStage.setScene(scene); - primaryStage.show(); - } - - private VBox getRoot() { - // 显示区域 - display = new TextField("0"); - display.setEditable(false); - display.setAlignment(Pos.CENTER_RIGHT); - display.setStyle("-fx-font-size: 24; -fx-background-color: #FFFFFF; -fx-border-color: #000000;"); - - // 按钮布局 - GridPane buttonGrid = new GridPane(); - buttonGrid.setPadding(new Insets(10)); - buttonGrid.setHgap(10); - buttonGrid.setVgap(10); - - // 创建按钮 - String[] buttonLabels = { - "%", "CE", "C", "×", - "1/x", "x²", "√", "÷", - "7", "8", "9", "-", - "4", "5", "6", "+", - "1", "2", "3", "=", - "+/-", "0", "." - }; - - int index = 0; - for (int row = 0; row < 5; row++) { - for (int col = 0; col < 4; col++) { - Button button = new Button(buttonLabels[index]); - button.setMinSize(50, 50); - button.setOnAction(event -> handleButtonClick(button.getText())); - buttonGrid.add(button, col, row); - index++; - } - } - - // 主布局 - VBox root = new VBox(10); - root.setPadding(new Insets(20)); - root.getChildren().addAll(display, buttonGrid); - return root; - } - - private void handleButtonClick(String buttonText) { - // 处理按钮点击 - switch (buttonText) { - case "C": - display.setText("0"); - currentInput.setLength(0); - break; - case "CE": - currentInput.setLength(0); - display.setText("0"); - break; - case "=": - try { - double result = evaluateExpression(currentInput.toString()); - display.setText(String.valueOf(result)); - currentInput.setLength(0); - currentInput.append(result); - } catch (Exception e) { - display.setText("错误"); - } - break; - case "+": - case "-": - case "×": - case "÷": - case "√": - case "x²": - case "1/x": - currentInput.append(convertOperator(buttonText)); - display.setText(currentInput.toString()); - break; - default: - currentInput.append(buttonText); - display.setText(currentInput.toString()); - break; - } - } - - private String convertOperator(String operator) { - switch (operator) { - case "×": - return "*"; - case "÷": - return "/"; - case "√": - return "Math.sqrt("; - case "x²": - return "^(2)"; - case "1/x": - return "(1/("; - default: - return operator; - } - } - - private double evaluateExpression(String expression) throws Exception { - // 使用简单的后缀表达式来评估表达式 - String[] tokens = expression.split("(?<=[-+*/()])|(?=[-+*/()])"); - Stack values = new Stack<>(); - Stack operations = new Stack<>(); - - for (String token : tokens) { - if (isNumeric(token)) { - values.push(Double.parseDouble(token)); - } else if (isOperator(token)) { - while (!operations.isEmpty() && precedence(token) <= precedence(operations.peek())) { - double b = values.pop(); - double a = values.pop(); - String op = operations.pop(); - values.push(applyOperation(a, b, op)); - } - operations.push(token); - } - } - - while (!operations.isEmpty()) { - double b = values.pop(); - double a = values.pop(); - String op = operations.pop(); - values.push(applyOperation(a, b, op)); - } - - return values.pop(); - } - - private boolean isNumeric(String str) { - return str.matches("-?\\d+(\\.\\d+)?"); - } - - private boolean isOperator(String str) { - return str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/") || - str.equals("√") || str.equals("x²") || str.equals("1/x"); - } - - private int precedence(String operator) { - switch (operator) { - case "+": case "-": - return 1; - case "×": case "÷": - return 2; - case "√": case "x²": - return 3; - default: - return 0; - } - } - - private double applyOperation(double a, double b, String operator) throws Exception { - switch (operator) { - case "+": - return a + b; - case "-": - return a - b; - case "*": - return a * b; - case "/": - if (b == 0) throw new Exception("除以零"); - return a / b; - case "√": - return Math.sqrt(b); - case "x²": - return Math.pow(a, 2); - case "1/x": - if (a == 0) throw new Exception("除以零"); - return 1 / a; - default: - return 0; - } - } -} \ No newline at end of file diff --git a/src/Main.java b/src/Main.java deleted file mode 100644 index fe7aa2b..0000000 --- a/src/Main.java +++ /dev/null @@ -1,15 +0,0 @@ -//TIP 要运行代码,请按 或 -// 点击装订区域中的 图标。 -public class Main { - public static void main(String[] args) { - //TIP 当文本光标位于高亮显示的文本处时按 - // 查看 IntelliJ IDEA 建议如何修正。 - System.out.printf("Hello and welcome!"); - - for (int i = 1; i <= 5; i++) { - //TIP 按 开始调试代码。我们已经设置了一个 断点 - // 但您始终可以通过按 添加更多断点。 - System.out.println("i = " + i); - } - } -} \ No newline at end of file