// Inner class for expression evaluation using Shunting-yard algorithm private class ExpressionEvaluator public double evaluate(String expression) return evaluateExpression(expression); private double evaluateExpression(String expr) Stack<Double> values = new Stack<>(); Stack<Character> operators = new Stack<>(); for (int i = 0; i < expr.length(); i++) c == '.') StringBuilder sb = new StringBuilder(); while (i < expr.length() && (Character.isDigit(expr.charAt(i)) else if (c == '(') operators.push(c); else if (c == ')') while (operators.peek() != '(') values.push(applyOperation(operators.pop(), values.pop(), values.pop())); operators.pop(); else if (isOperator(c)) while (!operators.isEmpty() && hasPrecedence(c, operators.peek())) values.push(applyOperation(operators.pop(), values.pop(), values.pop())); operators.push(c); while (!operators.isEmpty()) values.push(applyOperation(operators.pop(), values.pop(), values.pop())); return values.pop(); private boolean isOperator(char c) private boolean hasPrecedence(char op1, char op2) op1 == '%') && (op2 == '+' private double applyOperation(char op, double b, double a) switch (op) case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': if (b == 0) throw new ArithmeticException("Division by zero"); return a / b; case '%': return a % b; default: return 0;
(Logic Engine) import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Stack; public class CalculatorEngine private double memory; private boolean degreeMode = true; scientific calculator source code in java free download
public ScientificCalculator() engine = new CalculatorEngine(); initializeUI(); setTitle("Scientific Calculator"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); pack(); setLocationRelativeTo(null); // Inner class for expression evaluation using Shunting-yard
private double factorial(int n) n == 1) return 1; double result = 1; for (int i = 2; i <= n; i++) result *= i; return result; Math.toDegrees(Math.atan(num)) : Math.atan(num)
private double evaluateExpression(String expression) return new ExpressionEvaluator().evaluate(expression);
public String calculateUnary(String operation, String value, boolean isDegree) try double num = Double.parseDouble(value); double result = 0; switch (operation) case "sin": result = isDegree ? Math.sin(Math.toRadians(num)) : Math.sin(num); break; case "cos": result = isDegree ? Math.cos(Math.toRadians(num)) : Math.cos(num); break; case "tan": result = isDegree ? Math.tan(Math.toRadians(num)) : Math.tan(num); break; case "asin": result = isDegree ? Math.toDegrees(Math.asin(num)) : Math.asin(num); break; case "acos": result = isDegree ? Math.toDegrees(Math.acos(num)) : Math.acos(num); break; case "atan": result = isDegree ? Math.toDegrees(Math.atan(num)) : Math.atan(num); break; case "sinh": result = Math.sinh(num); break; case "cosh": result = Math.cosh(num); break; case "tanh": result = Math.tanh(num); break; case "log": result = Math.log10(num); break; case "ln": result = Math.log(num); break; case "√": result = Math.sqrt(num); break; case "∛": result = Math.cbrt(num); break; case "x²": result = num * num; break; case "x³": result = num * num * num; break; case "1/x": result = 1 / num; break; case " return String.valueOf(result); catch (Exception e) return "Error";
GMT+8, 2026-3-9 07:36 , Processed in 0.091633 second(s), 7 queries , Gzip On, Redis On.
Powered by Toprender X3.5
Copyright ? 2001-2023 顶渲网