实现数字与字母映射表的对应关系:
题目规则介绍:
思路:
首先我是先搭个框架出来,写个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;
}
}