华为:货币汇率机试题

///其实是修改的别人的代码,代码不分家,共享靠大家,留作以后复习参考。

import java.util.Scanner;

///题目是  1英镑=2美元=16人民币=32港元
///MAX为最大兑换,意思是所有货币都要用到
///MIN为最小兑换,意思是只需要港元为单位即可

///这道题看透了其实就是一道求单位的题,只需要用到除法!!!!!!!!

///输入: 2 8 2 127 HKD MAX
/// 第一个参数代表英镑兑美元的汇率,第二个参数代表美元兑人民币的汇率,第三个参数代表人民币对港元的汇率
///英镑>美元>人民币>港元
///输出:3 GBP 1 USD 7 CNY 1 HKD
///3*32+1*16+7*2+1 = 127
public class Main
{
 

    public static class SolutionWay
    {
 
        private static final String GBP = "GBP";///英镑
        private static final String USD = "USD";///美元
        private static final String CNY = "CNY";///人民币
        private static final String HKD = "HKD";///港元
        private static final String MAX = "MAX";///最大兑换
        private static final String MIN = "MIN";///最小兑换
        private static final String ERROR = "ERROR";
 

        private static int gbpRate;
        private static int usdRate;
        private static int cnyRate;
 
        private static int inputNum;
        private static String inputType;
        private static String resultType;
 
        ///设置汇率系数
        private static void setParam(int a, int b, int c, int num, String inputT, String resultT)
        {
            gbpRate = a * b * c;
            usdRate = a * b;
            cnyRate = a;
            inputNum = num;
            inputType = inputT;
            resultType = resultT;
        }
 
        private static int getRate(String type)
        {
            switch (type)
            {
                case GBP:
                    return gbpRate;
                case USD:
                    return usdRate;
                case CNY:
                    return cnyRate;
                default:///港元
                    return 1;
 
            }
        }
 
 
        private static boolean checkNum(String num)///检查输入是否为负数,或小数
        {
            for (int i = 0; i < num.length(); i++)
            {
                char c = num.charAt(i);
                if (c < '0' || c > '9')
                {
                    return false;
                }
            }
            return true;
        }
 
 
        private static boolean checkType(String type)///检查货币类型是否为以下四种之一,主要是检查是否为大写
        {
 
            return type.equals(HKD) || type.equals(CNY) || type.equals(USD) || type.equals(GBP);
        }
 ///输入的所有参数都要进行检查
        private static boolean checkResultType(String resultType)///检查是否为MAX或MIN
        {
            return resultType.equals(MAX) || resultType.equals(MIN);
        }
 

        private static String getMaxResult()
        {
            int tempV = getRate(inputType) * inputNum;///货币转换成以港元为单位
            StringBuilder result = new StringBuilder();
            if (tempV / gbpRate > 0)
            {
                result.append(tempV / gbpRate).append(' ').append("GBP ");
                tempV = tempV % getRate(GBP);
            }
            if (tempV / usdRate > 0)
            {
                result.append(tempV / usdRate).append(' ').append("USD ");
                tempV = tempV % getRate(USD);
            }
            if (tempV / cnyRate > 0)
            {
                result.append(tempV / cnyRate).append(' ').append("CNY ");
                tempV = tempV % getRate(CNY);
            }
            if (tempV > 0)
            {
                result.append(tempV).append(' ').append("HKD");
            }
            return result.toString();
        }
 

        private static String getMinResult()
        {
            return inputNum * getRate(inputType) + " HKD";
        }
 
 
        private static String computer(String input)
        {
            String[] strArr = input.split("\\s");///以空白字符分割字符串,得到一个字符串数组。
            /*
            1、\s用于匹配空白字符。
            2、\\s用于匹配字符串中的\和s,两个字符。
            */
            if (strArr.length == 6 && (checkNum(strArr[0]) && checkNum(strArr[1]) && checkNum(strArr[2]) && checkNum(strArr[3]) && checkType(strArr[4]) && checkResultType(strArr[5])))
            {
                setParam(Integer.parseInt(strArr[0]), Integer.parseInt(strArr[1]), Integer.parseInt(strArr[2]), Integer.parseInt(strArr[3]), strArr[4], strArr[5]);
 
                if (resultType.equals(MAX))
                {
                    return getMaxResult();///最大兑换
                } else
                {
                    return getMinResult();
                }
            } else
            {
                return ERROR;
            }
 
        }
    }
 
 
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        String s1 = in.nextLine();
 
        System.out.println(SolutionWay.computer(s1));
    }
}
/*
 一些基础总结
  1、 String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
  2、 StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过
     StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()
               等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,
               就可以调用它的toString()方法将其转换为一个String对象。
  3、StringBuilder类也代表可变字符串对象。实际上,StringBuilder和StringBuffer基本相似,
              两个类的构造器和方法也基本相同。不同的是:StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。
    StringBuffer类中的方法都添加了synchronized关键字,也就是给这个方法添加了一个锁,用来保证线程安全。
 */

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值