A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

talons

初级黑马

  • 黑马币:76

  • 帖子:74

  • 精华:0

本帖最后由 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;
        }



6 个回复

倒序浏览
好厉害!!!
回复 使用道具 举报
这个考虑到很多算法吗?感觉有点难啊
回复 使用道具 举报
这个考虑到很多算法吗?感觉有点难啊
回复 使用道具 举报
第二个,转换,不是用查表法吗
回复 使用道具 举报
666666666666
回复 使用道具 举报
受教了,看下题表示不会
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马