[java] 汇率换算器实现(1)(三)

2014-11-23 21:59:38 · 作者: · 浏览: 9
rsion();
87 Helper.printHelp();
88
89 while (true) {
90 cmdLine = br.readLine();
91 if (cmdLine.equals("1")) {
92 do {
93 try {
94 System.out.print("输入汇率关系 " +
95 Helper.getRateUsage() +
96 " (退出当前选项 \"q\"): ");
97
98 // input "q" to quick this step
99 tokens = processReadLine(br);
100 if (tokens == null) {
101 break;
102 }
103
104 Rate.setRate(tokens.from, tokens.to, tokens.value);
105 System.out.println();
106 inputError = false;
107 } catch (Exception e) {
108 System.out.println("\n\t请按照正确的格式进行输入\n");
109 inputError = true;
110 }
111 } while (inputError);
112 } else if (cmdLine.equals("2")) {
113 do {
114 try {
115 System.out.print("输入待转换量 " +
116 Helper.getExchangeUsage() +
117 " (退出当前选项 \"q\"): ");
118
119 // input "q" to quit this step
120 tokens = processReadLine(br);
121 if (tokens == null) {
122 break;
123 }
124
125 m.setMoney(tokens.value, tokens.from);
126 exchanged = Rate.exchangeRate(m, tokens.to);
127 System.out.println(m + " = " + exchanged);
128 System.out.println();
129 inputError = false;
130 } catch (IllegalArgumentException e) {
131 System.out.println("\n\t汇率转换表中没有相应的转换项\n");
132 inputError = true;
133 } catch (Exception e) {
134 System.out.println("\n\t请按照正确的格式进行输入\n");
135 inputError = true;
136 }
137 } while (inputError);
138 } else if (cmdLine.equals("3")) {
139 Helper.printHelp();
140 } else if (cmdLine.equals("4")) {
141 break;
142 } else {
143 Helper.printUsage();
144 }
145 }
146 }
147 }
148
149 // Money.java
150 package com.cnblogs.grassandmoon;
151
152 import java.util.*;
153
154 class Rate {
155 // 利用hashtable对不同货币之间的利率进行存储
156 // key: $from+$to, value: $rate
157 private static Hashtable rateTable = new Hashtable();
158
159 // 设置不同货币之间的利率
160 // 1 $from * $rate = 1 $to
161 public static void setRate(String from, String to, double rate) {
162 rateTable.put(from+to, new Double(rate));
163 }
164
165 // 将一定量的货币$m, 转变成单位为$to的货币量
166 // return: 相应的货币值
167 public static Money exchangeRate(Money m, String to) {
168 if (m.unit.equals(to)) return new Money(m);
169 String key = m.unit + to;
170 Double rate = (Double) rateTable.get(key);
171
172 if (rate == null) {
173 throw new IllegalArgumentException();
174 }
175
176 return new Money(m.amount*rate.doubleva lue(), to);
177 }
178 }
179
180 public class Money {
181 double amount;
182 String unit;
183
184 public String toString() {
185 return amount + " " + unit;
186 }
187