2015/8/7(金) 19:00 プログラムを実際に書きながら基礎から学ぶ勉強会 http://www.zusaar.com/event/6237003
public class Main {
public static void main(String... args) {
System.out.println("Hello Calculator!");
}
}
SET PATH
SET PATH=C:\Program Files\Java\jdk1.8.0_45\bin;%PATH%
javac Main.java
java Main
Hello Calculator!
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();
}
}
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));
}
}
javac Main.java
java Main
Hello Calculator!
1 2 + = 3
2つ引数の返し値一つのインターフェースを作る
public interface Operator {
Integer execute(Integer num1, Integer num2);
}
足し算の計算クラス
public class Add implements Operator {
@Override
public Integer execute(Integer num0, Integer num1) {
return Integer.valueOf(num0 + num1);
}
}
掛け算の計算クラス
public class Multi implements Operator {
@Override
public Integer execute(Integer num0, Integer num1) {
return Integer.valueOf(num0 * num1);
}
}
計算クラスを修正
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();
}
}
起動クラスを修正
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));
}
}
package com.company;
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());
operators.put("-", new Operator() {
@Override
public Integer execute(Integer num1, Integer num2) {
return num2 - num1;
}
});
Calculator cal = new Calculator(operators);
String test = "15 3 2 1 + * -";
System.out.format(" %s = %d ", test, cal.execute(test)); }
}
package com.company;
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());
operators.put("-", (Integer num1, Integer num2) -> {
return num2 - num1;
});
Calculator cal = new Calculator(operators);
String test = "15 3 2 1 + * -";
System.out.format(" %s = %d ", test, cal.execute(test));
}
}
もっと短く書くと
package com.company;
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());
operators.put("-", (num1, num2) -> num2 - num1);
Calculator cal = new Calculator(operators);
String test = "15 3 2 1 + * -";
System.out.format(" %s = %d ", test, cal.execute(test));
}
}
package com.company;
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());
operators.put("-", (num1, num2) -> num2 - num1);
operators.put("/", (num1, num2) -> num2 / num1);
Calculator cal = new Calculator(operators);
String test = "12 15 3 2 1 + * - /";
System.out.format(" %s = %d ", test, cal.execute(test));
}
}