一、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中是没有正确的运行结果。编写思路写在上面。