我有一项任务。我只想讨论它的主要概念。:
"ABCD"
A=$1.25
"ABCD"
API返回BigDecimal
的汇总。我的想法(简言之):
char[] items = bufferRead.readLine().toCharArray(); // using BufferedReader(new InputStreamReader(System.in))
char[]
项转换为BigDecimal[]
BigDecimal
听起来不错吗?
请不要提供代码:)我只想创建干净,考虑周全的OO代码:) 非常感谢!
答案 0 :(得分:2)
使用charValueMap
类型Map<Character, BigDecimal>
将'A'映射为1.25,将'B'映射到otherValue,依此类推。
然后从用户那里阅读input
,如下所示:
Scanner scanner = new Scanner(Sytem.in);
System.out.println("Enter input: ");
String input = scanner.nextLine();
scanner.close();
然后使用此input
并计算sum
,如下所示:
BigDecimal sum = BigDecimal.ZERO;
for(char c : input.toCharArray())
{
sum = sum.add(charValueMap.get(c));
}
System.out.println(sum.toString());
上面的代码段假定您输入的是有效输入。如果在charValueMap
中找不到任何特定字符的映射,则会产生错误,因此在计算sum
之前不要忘记添加一些防御性代码。
答案 1 :(得分:0)
这是一个可能的原型
public static void main(String[] args) {
char input[] = getUserInput();
Map<Character, Double> items = processUserInput(input);
BigDecimal result = getResult(items);
}
/**
* Get user input from keyboard.
*/
private static char[] getUserInput() {
// do something
return null;
}
/**
* Associate each item with its price.
*/
private static Map<Character, Double> processUserInput(char[] input) {
// do something
return null;
}
/**
* Count summ of each item.
*/
private static BigDecimal getResult(Map<Character, Double> items) {
// do something;
return null;
}
答案 2 :(得分:0)
这样的事情应该有效:
// predefined list...
BigDecimal predefinedValues[] = { BigDecimal.valueOf(1.25), BigDecimal.valueOf(2.50), BigDecimal.valueOf(0.95) };
// the variable use to calculate the total
BigDecimal total = BigDecimal.ZERO;
// Input from the user
char items[] = bufferRead.readLine().toCharArray();
// basic loop to calculate the total and catch "bad" inputs.
for ( char item: items )
{
int index = (item - 'A'); // this assumes ALL characters are uppercase!
if ( index >= 0 && index < predefinedValues.length )
total.add(predefinedValues[index]);
else
System.err.println("Bad input encountered: " + item);
}