계산기를 구현하는 가장 쉬운 방법은 재귀를 사용하는 것입니다.
public float calculate(String input) { int pos = input.indexOf('+'); if (pos != -1) { return calculate(input.substring(0, pos)) + calculate(input.substring(pos + 1)); }
코드는 먼저 + 연산자를 추출하고 String의 왼쪽 부분 + String의 오른쪽 부분의 결과를 반환합니다. 동일한 프로세스가 4 개의 피연산자에 대해 사용됩니다. * 및 /는 우선 순위가 + 및 -로 처리되므로 마지막으로 처리해야합니다.
public class Calculator { public float calculate(String input) { int pos = input.indexOf('+'); if (pos != -1) { return calculate(input.substring(0, pos)) + calculate(input.substring(pos + 1)); } else { pos = input.indexOf('-'); if (pos != -1) { return calculate(input.substring(0, pos)) - calculate(input.substring(pos + 1)); } else { pos = input.indexOf('*'); if (pos != -1) { return calculate(input.substring(0, pos)) * calculate(input.substring(pos + 1)); } else { pos = input.indexOf('/'); if (pos != -1) { return calculate(input.substring(0, pos)) / calculate(input.substring(pos + 1)); } } } } String toProcess = input.trim(); if( toProcess == null || toProcess.isEmpty() ) return 0; return Float.parseFloat(toProcess); } public static void main(String[] argv) { Calculator calculator = new Calculator(); String input; float output; input = " 2 + 2 "; output = calculator.calculate(input); System.out.println(input + " = " + output); input = " 1 + 2 * 3"; output = calculator.calculate(input); System.out.println(input + " = " + output); input = " 1 * 2 + 3"; output = calculator.calculate(input); System.out.println(input + " = " + output); input = " 1 / 2 * 3"; output = calculator.calculate(input); System.out.println(input + " = " + output); input = " 1 + 2 * 3 - 1/2"; output = calculator.calculate(input); System.out.println(input + " = " + output); input = " - 1/2 + 1 + 2 * 3 "; output = calculator.calculate(input); System.out.println(input + " = " + output); input = "1+2*3+4*5*6+7*8*9*10"; output = calculator.calculate(input); System.out.println(input + " = " + output); //--> 5167 input = " 12345678+1"; output = calculator.calculate(input); System.out.println(input + " = " + output); //--> 12345679 } }
2 + 2 = 4.0 1 + 2 * 3 = 7.0 1 * 2 + 3 = 5.0 1 / 2 * 3 = 1.5 1 + 2 * 3 - 1/2 = 6.5 - 1/2 + 1 + 2 * 3 = 6.5 1+2*3+4*5*6+7*8*9*10 = 5167.0 12345678+1 = 1.2345679E7
java.util.concurrent.Executors
java.util.concurrent.CountDownLatch