黑马程序员技术交流社区

标题: 笔试碰到的两个编程题目,整理如下 [打印本页]

作者: talons    时间: 2016-8-17 19:59
标题: 笔试碰到的两个编程题目,整理如下
本帖最后由 talons 于 2016-8-18 10:01 编辑

题目:
1、实现Singleton
2、数字金额转汉字大写
当时一个没写,Singleton想了半天没明白啥意思。回来一查......单例设计模式,这...........就真的尴尬了。
Single Dog我知道是单身狗,居然就不知道Singleton是单例设计,也只能怪自己了。
单例设计模式的笔试题目可以说是非常常见的,只是万万没想到用英语的。
单例设计模式(Singleton pattern):保证一个类在内存中只有一个对象。
这里我就只简单介绍下饿汉单例设计模式及实现:
         1. 私有化构造函数。
         2. 声明本类的引用类型变量,并且使用该变量指向本类对象。
         3. 提供一个公共静态的方法获取本类的对象。
代码实现:
[Java] 纯文本查看 复制代码
class Single{
        //声明本类的引用类型变量,并且使用该变量指向本类对象
        private static Single s = new Single();

        //私有化构造函数
        private Single(){}

        //提供一个公共静态的方法获取本类的对象
        public static  Single getInstance(){
                return s;
        }
}

第二题代码就比较长了。主要涉及几种数据类型的装换和字符串的拼接。代码如下:
[Java] 纯文本查看 复制代码
private static final String UNIT = "万千佰拾亿千佰拾万千佰拾元角分"; // 单位字符串
        private static final String CASEVAL = "零壹贰叁肆伍陆柒捌玖"; // 数量字符串
        private static final double MAX_VALUE = (Long.MAX_VALUE)/100; // 最大值限定
        
        public static String MoneyCase(double v) {
                //限定所取参数范围
                if (v < 0 || v > MAX_VALUE) {
                        return "参数非法!";
                }
                //将原double数据乘100将小数部分转化为整数然后存入一个长整型便于转换。
                long l = Math.round(v * 100);
                if (l == 0) {
                        return "零元整";
                }
                //将数据拼接成字符串,便于转换操作
                String value = l + "";               
                // 通过j变量通过索引来控制单位,除去无效高位,
                int j = UNIT.length() - value.length();
                //创建接收字符串
                String rs = "";
                //定义isZero变量用于判断当前位是否为0
                boolean isZero = false;
                //通过i变量检索value字符串进行每一位数值以及单位的构造
                for (int i= 0; i < value.length(); i++, j++) {
                        //提取当前位置的数量
                        char val = value.charAt(i);
                        //提取当前单位
                        char unit = UNIT.charAt(j);
                        if (val == '0') {
                                isZero = true;
                                if (unit == '亿' || unit == '万' || unit == '元') {
                                        rs = rs + unit;
                                        isZero = false;
                                }
                        } else {
                                if (isZero) {
                                        rs = rs + "零";
                                        isZero = false;                                       
                                }
                                rs = rs + CASEVAL.charAt(val - '0') + unit;
                        }
                }
                if (!rs.endsWith("分")) {
                        rs = rs + "整";
                }
                rs = rs.replaceAll("亿万", "亿");
                return rs;
        }




作者: lbx95272006    时间: 2016-8-18 00:11
好厉害!!!
作者: huangbinqqian    时间: 2016-8-18 00:46
这个考虑到很多算法吗?感觉有点难啊
作者: huangbinqqian    时间: 2016-8-18 00:51
这个考虑到很多算法吗?感觉有点难啊
作者: zaoan    时间: 2016-8-18 01:57
第二个,转换,不是用查表法吗
作者: FunnyKing    时间: 2016-8-18 09:58
666666666666
作者: li--yong    时间: 2016-8-18 17:52
受教了,看下题表示不会




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2