8. プログラム開始を記述
public class Main {
public static void main(String... args) {
System.out.println("Hello Calculator!");
}
}
9. 計算クラスを作る
import java.util.Stack;
public class Calculator {
public Calculator() {
}
public int execute(String input) {
Stack<Integer> stack = new Stack<>();
for (String s : input.split("s")) {
if ("+".equals(s)) {
Integer num1 = stack.pop();
Integer num2 = stack.pop();
stack.push(Integer.valueOf(num1 + num2));
} else {
stack.push(Integer.valueOf(s));
}
}
return stack.pop();
}
}
10. 計算クラスを呼び出す
public class Main {
public static void main(String... args) {
System.out.println("Hello Calculator!");
Calculator cal = new Calculator();
String test = "1 2 +";
System.out.format(" %s = %d ", test, cal.execute(test));
}
}
19. 足し算と掛け算クラス
public class Add implements Operator {
public static String tag = "+";
@Override
public Integer execute(Integer num0, Integer num1) {
return Integer.valueOf(num0.intValue() + num1.intValue());
}
}
public class Multi implements Operator {
public static String tag = "*";
@Override
public Integer execute(Integer num0, Integer num1) {
return Integer.valueOf(num0.intValue() * num1.intValue());
}
}
20. 計算クラスを修正import java.util.*;
public class Calculator {
private final Map<String, Operator> operators;
public Calculator(Map<String, Operator> operators) {
this.operators = operators;
}
public int execute(String input) {
Stack<Integer> stack = new Stack<>();
for (String s : input.split("s")) {
Operator operator = operators.get(s);
if (operator != null) {
Integer num1 = stack.pop();
Integer num2 = stack.pop();
stack.push(operator.execute(num1, num2));
} else {
stack.push(Integer.valueOf(s));
}
}
return stack.pop();
}
}
21. 起動クラスの修正
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String... args) {
System.out.println("Hello Calculator!");
Map<String, Operator> operators = new HashMap<>();
operators.put("+", new Add());
operators.put("*", new Multi());
Calculator cal = new Calculator(operators);
String test = "3 2 1 + *";
System.out.format(" %s = %d ", test, cal.execute(test));
}
}
処理が増えると
ここが増える