有一个数字与字母的映射表,且有以下规则,JAVA测试题


一、Java面试题测试

现在有一个数字与字母的映射表,且有以下规则:

映射表:
数字 字母
3 A
5 B
7 C

规则:

1.碰到当前数字时,使用字母替换,例如,3-> A
2.碰到当前数字的倍数时,使用字母替换, 例如:6->A
3.碰到多个数字的倍数时,使用多个对应的字母替代,例如:15 -> AB,21->AC
请根据映射表和规则,给出0-100之间的转换结果,提示:不要直接在for循环中使用if判断,尽可能的使用设计模式。

一、使用步骤

1.引入库

代码如下 :

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.*;

/**
 * Created by Lenovo on 2023/3/12.
 */
public class CSDNTest {

    public static void main(String[] args){
        System.out.println("hello world!");

        //C:/Users/Lenovo/IdeaProjects/DemoTest
        String filePath="C:\\Users\\Lenovo\\IdeaProjects\\DemoTest";
        List<String> directoryFileList = getDirectoryFileList(filePath);
        directoryFileList.forEach(e->{
            System.out.println(e);
        });
        System.out.println("------------------");
        System.out.println(directoryFileList);

        for (int i = 0; i < 101; i++) {
            String numMap2Str = numMap2Str(i);
            System.out.println(numMap2Str);
        }
    }

    /**
     * 获取项目文件夹下的文件名
     * @param filePath
     * @return
     */
    public static List<String> getDirectoryFileList(String filePath)  {
        if(filePath==null){
            return null;
        }
        if(filePath.isEmpty()){
            return null;
        }
        File file = new File(filePath);
        ArrayList<String> arrayList = new ArrayList<>();
        if (file.isDirectory()){
            File[] files = file.listFiles();
            for (int i = 0; i < files.length; i++) {
                File file1 = files[i];
                if (file1.isFile()){
                    String file1Name = file1.getName();
                    arrayList.add(file1Name);
                }
            }
        }
        return arrayList;
    }

    /**
     * 数字根据相应的规则转换成为字符串
     * @param srcNum
     * @return
     */
    public static String numMap2Str(int srcNum){
        if(srcNum<0){
            return null;
        }
        if(srcNum>100){
            return null;
        }

        HashMap<Integer, Character> integerCharacterHashMap = new HashMap<>();
        integerCharacterHashMap.put(3,'A');
        integerCharacterHashMap.put(5,'B');
        integerCharacterHashMap.put(7,'C');

        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(3);
        arrayList.add(5);
        arrayList.add(7);

        ArrayList<Integer> integers = new ArrayList<>();
        for (int i = 0; i <= 100; i++) {
            integers.add(i);
        }

        ArrayList<CusConvertIntDetail> cusConvertIntDetailArrayList = new ArrayList<>();
        for (Integer integer : integers) {
            HashSet<Integer> integerHashSet = new HashSet<>();
            StringBuilder stringBuilder = new StringBuilder();
            int count=0;
            while(true){
                Integer randomFactor = getRandomFactor(arrayList);
                if(integer%randomFactor==0){
                    integerHashSet.add(randomFactor);
                    //count++;
                    stringBuilder.append(integerCharacterHashMap.get(randomFactor));
                    continue;
                }
                count++;
                if(count>1000000){
                    break;
                }
            }


            CusConvertIntDetail cusConvertIntDetail = new CusConvertIntDetail();
            cusConvertIntDetail.setId(UUID.randomUUID().toString());
            cusConvertIntDetail.setName(integer);
            cusConvertIntDetail.setFactorStr(stringBuilder.toString());
            if(integerHashSet.size()>1){
                cusConvertIntDetail.setTag(true); // multiple factor
            }else if(integerHashSet.size()==1){
                cusConvertIntDetail.setTag(false); // single factor
            }else {
                cusConvertIntDetail.setTag(null);
            }
            cusConvertIntDetailArrayList.add(cusConvertIntDetail);

        }

        HashMap<Integer, String> integerStringHashMap = new HashMap<>();
        for (Integer integer : integers) {
            for (CusConvertIntDetail cusConvertIntDetail : cusConvertIntDetailArrayList) {
                if(integer==cusConvertIntDetail.getName()){
                    if(cusConvertIntDetail.getTag()==null){ //single factor
                        integerStringHashMap.put(integer,String.valueOf(integer));
                    }else if(cusConvertIntDetail.getTag()==false){ // null factor
                        integerStringHashMap.put(integer,String.valueOf(integerCharacterHashMap.get(integer)));
                    }else{// multiple factor
                        integerStringHashMap.put(integer,cusConvertIntDetail.getFactorStr());
                    }
                }
            }
        }
        return integerStringHashMap.get(Integer.valueOf(srcNum));
    }

    public static Integer getRandomFactor(List<Integer> srcIntFactorList){
        if(srcIntFactorList==null){
            return null;
        }
        if(srcIntFactorList.size()==0){
            return null;
        }
        Random random = new Random();
        Integer integer=null;
        int count=0;
        while (true){
            int intIndex=random.nextInt(3);
            integer = srcIntFactorList.get(intIndex);
            count++;
            if(count>1000000){
                break;
            }
        }
        return integer;
    }
}

class CusConvertIntDetail{
    private String id;
    private Integer name;
    private Boolean tag;
    private String factorStr;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Integer getName() {
        return name;
    }

    public void setName(Integer name) {
        this.name = name;
    }

    public Boolean getTag() {
        return tag;
    }

    public void setTag(Boolean tag) {
        this.tag = tag;
    }

    public String getFactorStr() {
        return factorStr;
    }

    public void setFactorStr(String factorStr) {
        this.factorStr = factorStr;
    }
}

2.读入数据

代码如下 :

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

上面的Java算法接口实际在IDE中是没有正确的运行结果。编写思路写在上面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员是干活的

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值