Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package smartcalc;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Scanner;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public final class SmartCalc {
- private static final Pattern OPERAND_PATTERN = Pattern.compile("\\d+(?:\\.\\d+)?");
- private static final Pattern OPERATION_PATTERN = Pattern.compile("add|subtract|multiply|divide");
- public static void main(final String[] args) {
- try (final Scanner scanner = new Scanner(System.in)) {
- String input;
- while (!(input = scanner.nextLine()).equals("quit")) {
- try {
- final List<String> operands = allMatches(OPERAND_PATTERN, input);
- final List<String> operations = allMatches(OPERATION_PATTERN, input);
- if (operands.size() == 2 && operations.size() == 1) {
- final double result = applyOperation(Double.parseDouble(operands.get(0)), Double.parseDouble(operands.get(1)), operations.get(0));
- System.out.println("=" + result);
- break;
- } else {
- throw new IllegalStateException("Illegal operand or operation size");
- }
- } catch (final IllegalStateException e) {
- System.out.println("You inputed more than two operands or more than one operations. Please try again or type 'quit' to stop");
- }
- }
- }
- }
- private static List<String> allMatches(final Pattern pattern, final String input) {
- final Matcher matcher = pattern.matcher(input);
- final List<String> operands = new ArrayList<>();
- while (matcher.find()) {
- operands.add(matcher.group());
- }
- return operands;
- }
- private static double applyOperation(final double firstOperand, final double secondOperand, final String operation) {
- switch (operation) {
- case "add":
- return firstOperand + secondOperand;
- case "subtract":
- return firstOperand - secondOperand;
- case "multiply":
- return firstOperand * secondOperand;
- case "divide":
- return firstOperand / secondOperand;
- }
- // TODO: throw exception
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement