【问题标题】:Basic Currency Converter - Looking for feedback基本货币转换器 - 寻求反馈
【发布时间】:2014-12-14 23:02:53
【问题描述】:

这是我介绍 Java 类的基本货币转换器。我应该能够使用静态汇率在日元、美元、英镑和欧元之间进行转换。它有效,但我很想知道我是否以最有效的方式做到了。它看起来很长,看起来像一个巨大的混乱。只是想要一些反馈。

import java.util.Scanner;

public class currency
{

     public currency()
    {
        char us_dollar_sym = 36;
        char pound_sym = 163;
        char yen_sym = 165;
        char euro_sym = 8364; 

        String us_dollar = "Dollars"; 
        String pound = "Pounds";
        String yen = "Yen";
        String euro = "Euros";
        double rate = 0;


        // Interface
        System.out.println("Welcome to the Currency Converter Program \n");
        System.out.println("Use the following codes to input your currency choices: \n 1 - US dollars \n 2 - Euros \n 3 - British Pounds \n 4 - Japanese Yen \n");

        // 
        System.out.println("Please choose the input currency:");
        Scanner in = new Scanner(System.in);
        int choice = in.nextInt(); 

       String inType = null;
        switch(choice) {
        case 1: inType = "US Dollars >> " + us_dollar_sym;  break;
        case 2: inType = "Euros >> " + euro_sym; break;
        case 3: inType = "British Pounds >> " + pound_sym; break;
        case 4: inType = "Japanese Yen >> " + yen_sym; break;
        default:
        System.out.println("Please restart the program & enter a number from the list.");
        return;
      }

        System.out.println("Please choose the output currency");
        int output = in.nextInt();

        System.out.printf("Now enter the input in " + inType);
        double input = in.nextDouble(); 

      if (choice == output) 
        System.out.println("Same currency no need to convert");

      if (choice == 1 && output == 2)
        { 
           double dollar_euro_rate = 0.78391;
           rate = input * dollar_euro_rate;
           System.out.printf( "%s" + input + " at a conversion rate of " + dollar_euro_rate + " Dollars to %s = %.2f\n", (char)us_dollar_sym, euro, rate);
        }
        else if (choice == 1 && output == 3){ 
           double dollar_pound_rate = 0.621484;
           rate = input * dollar_pound_rate;
           System.out.printf( "%s" + input + " at a conversion rate of " + dollar_pound_rate + " Dollars to %s = %.2f\n", (char)us_dollar_sym, pound, rate);
        }
        else if (choice == 1 && output == 4){ 
          double dollar_yen_rate = 107.174;
          rate = input * dollar_yen_rate;
          System.out.printf( "%s" + input + " at a conversion rate of " + dollar_yen_rate + " Dollars to %s = %.2f\n", (char)us_dollar_sym, yen, rate);
        }
      if (choice == 2 && output == 1)
      {
          double euro_dollar_rate = 1.27579;
          rate = input * euro_dollar_rate;
          System.out.printf( "%s" + input + " at a conversion rate of " + euro_dollar_rate + " Euros to %s = %.2f\n", (char)euro_sym, us_dollar, rate);
        }
        else if (choice == 2 && output == 3)
        {
          double euro_pound_rate = 0.792648;
          rate = input * euro_pound_rate;
          System.out.printf( "%s" + input + " at a conversion rate of " + euro_pound_rate + " Euros to %s = %.2f\n", (char)euro_sym, pound, rate);
        }
        else if (choice == 2 && output == 4)
        {
          double euro_yen_rate = 136.708;
          rate = input * euro_yen_rate;
          System.out.printf( "%s" + input + " at a conversion rate of " + euro_yen_rate + " Euros to %s = %.2f\n", (char)euro_sym, yen, rate);
        }
      if (choice == 3 && output == 1)
      {
          double pound_dollar_rate = 1.60972;
          System.out.printf( "%s" + input + " at a conversion rate of " + pound_dollar_rate + " Pounds to %s = %.2f\n", (char)pound_sym, us_dollar, rate);
        }
        else if (choice == 3 && output == 2)
        {
          double pound_euro_rate = 1.26161;
          System.out.printf( "%s" + input + " at a conversion rate of " + pound_euro_rate + " Pounds to %s = %.2f\n", (char)pound_sym, euro, rate);
        }
        else if (choice == 3 && output == 4)
        {
          double pound_yen_rate = 172.511;
          System.out.printf( "%s" + input + " at a conversion rate of " + pound_yen_rate + " Pounds to %s = %.2f\n", (char)pound_sym, yen, rate);
        }
      if (choice == 4 && output == 1)
      { 
          double yen_dollar_rate = 0.00932574;
          System.out.printf( "%s" + input + " at a conversion rate of " + yen_dollar_rate + " Yen to %s = %.2f\n", (char)yen_sym, us_dollar, rate);
        }
        else if (choice == 4 && output == 2)
        { 
          double yen_euro_rate = 0.00730615;
          System.out.printf( "%s" + input + " at a conversion rate of " + yen_euro_rate + " Yen to %s = %.2f\n", (char)yen_sym, euro, rate);
        }
        else if (choice == 4 && output == 3)
        {
          double yen_pound_rate = 0.00579135;
          System.out.printf( "%s" + input + " at a conversion rate of " + yen_pound_rate + " Yen to %s = %.2f\n", (char)yen_sym, pound, rate);
        }
       System.out.println("Thank you for using the currency converter");
    }
}

【问题讨论】:

  • 我认为这个程序可以工作(正如你在那里写的那样)?如果是的话,最好发到Code Review

标签: java converter currency


【解决方案1】:

我总是谨慎使用整数输入。如果有人键入一个字符,您的程序可能会因为发生异常而崩溃。接受数字的字符可能是更安全的选择。

当您在同一 if 语句中检查“选择”和“输出”时,它需要更多资源。嵌套 if 语句可能会提高效率。这将有 if 语句可供选择,其中 if 语句用于输出。

【讨论】:

    【解决方案2】:

    由于您将货币称为 int,因此我将使用 n x m 矩阵来存储汇率。 n 是第一种货币,m 是第二种货币。使用这两个 int,您可以追溯正确的汇率。

    矩阵中的对角线为 1(因为 USD >> USD =1)。

    最后,编写一个函数来计算汇率并返回相应的文本(您可以使用哈希图,int 作为键,名称(字符串)作为值)

    exchange_rate = currency[1][2];
    
    
    HashMap hm = new HashMap();
    
    hm.put(1, new string("USD");
    

    等等……

    【讨论】:

      【解决方案3】:

      将所有费率表示为一个标准值的乘数,例如使用美元作为标准值。那么 GBP 的换算值为 1.60,USD 为 1.0,Euro 为 1.29。那么转换计算将是:

      从值 * 从转换 * 1/到转换

      例如,从 1 GBP 到 Euro 将是:

      1 * 1.60 * (1/1.29) = 1.24

      如果您将所有费率存储在 HashMap 中,则可以完全避免使用 switch 语句。

      【讨论】:

        【解决方案4】:

        为什么您使用这种方式来转换货币。您有 JSR 354 货币和货币 API,这里有一些您可以使用的示例,它非常易于使用且速度很快:

        MonetaryAmount monetaryAmount = Money.of(100.20, usd);
        CurrencyUnit currency = monetaryAmount.getCurrency();
        NumberValue numberValue = monetaryAmount.getNumber();
         
        int value= numberValue.intValue();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-07
          相关资源
          最近更新 更多