将char []转换为BigDecimal [],一般概念

时间:2014-02-27 09:01:37

标签: java

我有一项任务。我只想讨论它的主要概念。:

  1. 用户从键盘项输入,例如"ABCD"
  2. 每个项目都有预定义的价格,例如A=$1.25
  3. 我需要使用"ABCD" API返回BigDecimal的汇总。
  4. 我的想法(简言之):

    1. char[] items = bufferRead.readLine().toCharArray(); // using BufferedReader(new InputStreamReader(System.in))
    2. char[]项转换为BigDecimal[]
    3. 计算BigDecimal
    4. 的总和

      听起来不错吗?

      请不要提供代码:)我只想创建干净,考虑周全的OO代码:) 非常感谢!

3 个答案:

答案 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);
    }