diff --git a/src/main/java/resources/CalculatorResource.java b/src/main/java/resources/CalculatorResource.java index d623b998bdf076974631741ce552a6a206d5977f..8d0ee050a69ea210ca94d89e44026522d0ffc280 100644 --- a/src/main/java/resources/CalculatorResource.java +++ b/src/main/java/resources/CalculatorResource.java @@ -13,82 +13,95 @@ import javax.ws.rs.core.MediaType; public class CalculatorResource { /** - * Method handling HTTP POST requests. The calculated answer to the expression will be sent to the client as - * plain/text. + * Method handling HTTP POST requests. The calculated answer to the expression + * will be sent to the client as plain/text. + * * @param expression the expression to be solved as plain/text. * @return solution to the expression as plain/text or -1 on error */ @POST @Consumes(MediaType.TEXT_PLAIN) @Produces(MediaType.TEXT_PLAIN) - public int calculate(String expression){ + public int calculate(String expression) { // Removes all whitespaces - String expressionTrimmed = expression.replaceAll("\\s+",""); + String expressionTrimmed = expression.replaceAll("\\s+", ""); int result = -1; /* * .matches use regex expression to decide if a String matches a given pattern. - * [0-9]+[+][0-9]+ explained: - * [0-9]+: a number from 0-9 one or more times. For example 1, 12 and 123. - * [+]: the operator + one time. - * The total regex expression accepts for example: - * 12+34, - * 1+2, - * 10000+1000 + * [0-9]+[+][0-9]+ explained: [0-9]+: a number from 0-9 one or more times. For + * example 1, 12 and 123. [+]: the operator + one time. The total regex + * expression accepts for example: 12+34, 1+2, 10000+1000 */ - if(expressionTrimmed.matches("[0-9]+[+][0-9]+")) result = sum(expressionTrimmed); - else if(expressionTrimmed.matches("[0-9]+[-][0-9]+")) result = subtraction(expressionTrimmed); - else if(expressionTrimmed.matches("[0-9]+[*][0-9]+")) result = multiplication(expressionTrimmed); - else if(expressionTrimmed.matches("[0-9]+[/][0-9]+")) result = division(expressionTrimmed); - + if (expressionTrimmed.matches("^\\d+(?:\\s*[+]\\s*\\d+)*$")) + result = sum(expressionTrimmed); + else if (expressionTrimmed.matches("^\\d+(?:\\s*[-]\\s*\\d+)*$")) + result = subtraction(expressionTrimmed); + else if (expressionTrimmed.matches("^\\d+(?:\\s*[*]\\s*\\d+)*$")) + result = multiplication(expressionTrimmed); + else if (expressionTrimmed.matches("^\\d+(?:\\s*[/]\\s*\\d+)*$")) + result = division(expressionTrimmed); + + /* System.out.println(result); */ return result; } /** * Method used to calculate a sum expression. + * * @param expression the equation to be calculated as a String * @return the answer as an int */ - public int sum(String expression){ + public int sum(String expression) { + System.out.println(expression); String[] split = expression.split("[+]"); - int number1 = Integer.parseInt(split[0]); + int sum = 0; + for (String tall: split) { + sum += Integer.parseInt(tall); + } + return sum; + /* int number1 = Integer.parseInt(split[0]); int number2 = Integer.parseInt(split[1]); + int number3 = Integer.parseInt(split[2]); - return number1 + number2; + return number1 + number2 + number3; */ } /** * Method used to calculate a subtraction expression. + * * @param expression the expression to be calculated as a String * @return the answer as an int */ - public int subtraction(String expression){ + public int subtraction(String expression) { String[] split = expression.split("[-]"); - int number1 = Integer.parseInt(split[0]); - int number2 = Integer.parseInt(split[1]); - - return number1 - number2; + int sum = 0; + for (String tall: split) { + sum -= Integer.parseInt(tall); + } + return sum; } - private int multiplication(String equation){ + private int multiplication(String equation) { String[] split = equation.split("[*]"); - int number1 = Integer.parseInt(split[0]); - int number2 = Integer.parseInt(split[1]); - - return number1 * number2; + int sum = 0; + for (String tall: split) { + sum *= Integer.parseInt(tall); + } + return sum; } - private int division(String equation) { String[] split = equation.split("[/]"); - int number1 = Integer.parseInt(split[0]); - int number2 = Integer.parseInt(split[1]); - - return number1 / number2; + int sum = 0; + for (String tall: split) { + sum /= Integer.parseInt(tall); + } + return sum; } } \ No newline at end of file