4. 现在有一个数字与字母的映射表,且有以下规则: 映射表: 数字 字母 3 A 5 B 7 C 规则: 1. 碰到当前数字时,使用字母替换,例如,3-> A 2. 碰到当前数字的倍数时,使用字母替换, 例如:6->A 3. 碰到多个数字的倍数时,使用多个对应的字母替代,例如:15 -> AB,21->AC 请根据映射表和规则,给出0-100之间的转换结果,提示:不要直接在for循环中使用if判断,尽可能的使用设计模式。
时间: 2023-05-24 07:05:08 浏览: 213
表与表之间的映射
策略模式是一种较好的设计模式,可以根据不同的条件选择不同的转换策略。具体实现如下:
首先定义一个映射表:
class MappingTable {
private static Map<Integer, String> map = new HashMap<>(); // 存储数字和字母的映射表
static {
map.put(3, "A");
map.put(5, "B");
map.put(7, "C");
}
public static String getMapping(int num) {
if (map.containsKey(num)) {
return map.get(num); // 如果数字本身就有对应的字母,则直接返回
} else {
StringBuilder stringBuilder = new StringBuilder();
for (Integer key : map.keySet()) { // 遍历映射表中的数字
if (num % key == 0) {
stringBuilder.append(map.get(key)); // 如果数字是倍数,则加上对应的字母
}
}
return stringBuilder.toString();
}
}
}
然后定义一个转换策略的接口:
interface ConversionStrategy {
String convert(int num);
}
接下来定义三个具体的转换策略,分别对应数字本身就有对应字母、数字是一个或多个数字的倍数、数字既有对应字母又是一个或多个数字的倍数:
class NoMappingStrategy implements ConversionStrategy {
@Override
public String convert(int num) {
return String.valueOf(num);
}
}
class MultipleMappingStrategy implements ConversionStrategy {
@Override
public String convert(int num) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 1; i <= num; i++) {
stringBuilder.append(MappingTable.getMapping(i)); // 遍历每个数字,进行转换
}
return stringBuilder.toString();
}
}
class MappingAndMultipleMappingStrategy implements ConversionStrategy {
@Override
public String convert(int num) {
StringBuilder stringBuilder = new StringBuilder(MappingTable.getMapping(num)); // 先加上当前数字的对应字母
for (int i = num + 1; i <= 100; i++) {
if (i % num == 0) {
stringBuilder.append(MappingTable.getMapping(i)); // 遍历倍数,进行转换
}
}
return stringBuilder.toString();
}
}
最后,根据数字的不同情况选择不同的转换策略,并进行转换:
public class Converter {
private ConversionStrategy strategy;
public Converter(int num) {
if (MappingTable.getMapping(num).isEmpty()) { // 数字本身没有对应的字母
strategy = new NoMappingStrategy();
} else if (MappingTable.getMapping(num).length() == 1) { // 数字是一个数字的倍数
strategy = new MultipleMappingStrategy();
} else { // 数字既有对应字母又是一个或多个数字的倍数
strategy = new MappingAndMultipleMappingStrategy();
}
}
public String convert() {
return strategy.convert(num);
}
}
使用示例:
public static void main(String[] args) {
for (int i = 0; i <= 100; i++) {
Converter converter = new Converter(i);
System.out.println(converter.convert());
}
}
阅读全文