java简单实现数字与字母的映射关系

实现数字与字母映射表的对应关系:


题目规则介绍:
在这里插入图片描述


思路:

首先我是先搭个框架出来,写个for循环,然后把规则写死在Map方法,如:map.put(3,“A”);map.put(5,“B”);等
因为题目中不能在循环写if判断,我就先在类外面定义个A方法,在这里面写业务逻辑,判断之类;在循环中去调用这个方法;
业务逻辑判断:

  • 规则1、每次从循环传进一个参数,就会去map判断是否存在,存在则赋值A;
  • 规则2、3、从循环传进一个参数,规则三可能要多个字母拼接,所以使用了StringBuilder,在A方法使用map.keySet()循环:判断入参%key==0
    则把当前map的value值赋值StringBuilder对象;

自测成功后,准备优化下一点:使用设计模式
下面我选择的是懒汉加载的单例模式
简单说下单例模式的特点:
1、在程序生命周期内是只存在一个对象
2、懒汉模式是在调用的时候去创建一个对象;饿汉模式是程序启动的时候创建;
3、实现方式:1.构造方法私有;2.公共的静态方法内判断对象如果为空则创建对象;3.把当前对象设置为私有静态属性;

然后接下来把业务逻辑的A方法放入单例对象中,测试时把单例对象创建出来,在for方法使用A方法,并打印日志

下面是我自测的代码,可以参考下,其实题目描述还是还有哪些待优化,或者有bug、遗漏的问题,欢迎在评论区,互相讨论,谢谢

测试类

@Slf4j
public class AlphabeticMapping implements Mappings {
    public static void main(String[] args) {
        LazyAcalculation instance = LazyAcalculation.getInstance();
        //0-100
        for (int i = 1; i <= 100; i++) {
            String calculation = instance.getCalculation(i);
            String str = Obje在这里插入代码片ctUtils.isEmpty(calculation) ? i + "":calculation;
            log.info("当前数字" +i+ "映射字母:" + str);
        }
    }
}

下面是懒汉单例对象:

public class LazyAcalculation implements Mappings {

    private static LazyAcalculation lazyAcalculation;

    private LazyAcalculation() {}

    public static LazyAcalculation getInstance() {
        if (lazyAcalculation == null) {
            lazyAcalculation = new LazyAcalculation();
        }
        return lazyAcalculation;
    }

    //数字与字母的映射表计算
    public String getCalculation(Integer age) {
        Map<Integer, String> map = new HashMap<>();
        map.put(3, "A");
        map.put(5, "B");
        map.put(7, "C");
        String str = null;
        StringBuilder builder = new StringBuilder();
        if (map.containsKey(age)) {
            str = map.get(age);
        } else {
            for (Integer integer : map.keySet()) {
                if (age % integer == 0) {
                    builder.append(map.get(integer));
                }
                str = builder.toString();
            }
        }
        return str;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值