/* * 練習問題20.6 p.470 * name op value形式の入力を受け取るプログラムを作成しなさい。 * nameは自分で選んだ3個の単語の1つで、opは+、-、=のどれかで、valueは数です。 * 名前付値に各演算子を適用しなさい。 * 入力がなくなったら、3つの値を表示しなさい。 * もし、興味があれば、AttributedImplで使用されたHashMapを使用してみなさい。 * そうすれば、任意の個数の名前付定数を使用できます。 */ package ch20.ex20_06; import java.io.StreamTokenizer; import java.io.StringReader; public class NameOpValue { public static void test() { Attribute panda = new Attribute("panda"); Attribute dog = new Attribute("dog"); Attribute cat = new Attribute("cat"); String src = "panda = 0 dog = 1 panda + 5 cat = 3 panda + 8 dog + 2 dog - 1 cat - 1"; StreamTokenizer in = new StreamTokenizer(new StringReader(src)); try { while(in.nextToken() != StreamTokenizer.TT_EOF) { String target = in.sval; in.nextToken(); int op = in.ttype; in.nextToken(); double value = in.nval; if ("panda".equals(target)) { operation(panda, op, value); } else if ("dog".equals(target)) { operation(dog, op, value); } else if ("cat".equals(target)) { operation(cat, op, value); } else { System.out.println("error"); } } } catch(Exception e) { System.out.println(e); } System.out.println(panda.getName() + ": " + panda.getValue()); System.out.println(dog.getName() + ": " + dog.getValue()); System.out.println(cat.getName() + ": " + cat.getValue()); } public static void operation(Attribute name, int op, double value) { if ('+' == op) { name.setValue(name.getValue() + value); } else if ('-' == op) { name.setValue(name.getValue() - value); } else if ('=' == op) { name.setValue(value); } } public static void main(String[] args) { NameOpValue.test(); } }