java:重构编码密码
所以我用一个换位密码实现了一个编码方法,我提供了一个密钥和一条文本消息java:重构编码密码,java,refactoring,Java,Refactoring,所以我用一个换位密码实现了一个编码方法,我提供了一个密钥和一条文本消息 可视化 键:“都德” 信息:“hellobro” 我根据关键字母的字母顺序分配数字(int数组) dude 0132 HE l l o b r o 算术排序 D D E U 01 2 3 HLE o r o b 然后按列“读取”:加密消息:“holrloeb” 实施 import java.util.*; 公共类test1{ 公共静态字符串编码(字符串textraw,字符串键){ int csize=0,index
- 可视化
键:“都德”
信息:“hellobro”
我根据关键字母的字母顺序分配数字(int数组) dude
0132
HE l l
o b r o
D D E U
01 2 3
HLE
o r o b 然后按列“读取”:加密消息:“holrloeb”
- 实施
import java.util.*;
公共类test1{
公共静态字符串编码(字符串textraw,字符串键){
int csize=0,index=0;
int[]数={0,3,1,2};
int mod=textraw.length()%key.length();
int div=textraw.length()/key.length();
//计算柱的尺寸
如果(mod==0){
csize=div;
}否则{
csize=div+1;
}
int[]snumbers=numbers.clone();
数组。排序(snumbers);
//排序列
StringBuilder str=新的StringBuilder(textraw.length());
for(int i=0;i”+编码(s,keyk));
}
}
我的问题是如何重构encode方法,至少去掉第二个嵌套for循环
我试图省略索引,但尚未使其起作用。任何帮助都将不胜感激 一般评论 重构和代码风格在某种程度上是个人的。所以我想不是所有人都同意我的观点。 一些好的实践可以确保代码简洁,但是类、方法和变量名也应该反映它们是什么和/或做什么。您选择的名称应该有助于阅读代码。如果一个方法太长,则创建一个新方法以提高可读性。 在当前代码中,可以用另一个方法替换csize的计算。您还可以选择更可读的变量,例如更改变量str。 有关于正确Java代码的完整书籍。马丁·福勒写了一本比较受欢迎的书。因此,这些小评论根本不涉及重构主题 方法的目标 你解释了你想做什么。然而,你的钥匙(花花公子)的用途似乎不清楚。它实际上没有被使用。如果您使用其他键测试代码,则其顺序完全相同。所以,似乎有什么不对劲 省略一个循环的代码 对于所有在这方面有丰富经验的人来说:这肯定可以进一步改进和/或采用不同的结构。此代码使用与原始post相同的方法参数,并生成与原始post相同的测试结果。我并没有试图解释为什么没有使用钥匙(老兄) 输出示例getKeyArray
"GFEABCD" Result: [3, 4, 5, 6, 2, 1, 0]
"ABDCEFG" Result: [0, 1, 3, 2, 4, 5, 6]
“增加代码样式”?您会更改功能以获得外观更好的代码吗?你到底写了什么密码?谢谢你的回复,我的意思是我想更改我的柱状转置密码的代码结构,但保持功能不变,因为我的代码已经在工作了
private ArrayList<Integer> getKeyArray(String key) {
String alfabet = "abcdefghijklmnopqrstuvwxyz";
ArrayList<Integer> resultArrayList = new ArrayList<>();
HashMap<Integer, Integer> charRank = new HashMap<>();
for (int k = 0; k < key.length(); k++) {
int alfabetIndex = alfabet.indexOf(Character.toLowerCase(key.charAt(k)));
charRank.put(k, alfabetIndex);
}
charRank.entrySet()
.stream()
.sorted(Map.Entry.<Integer, Integer>comparingByValue()).forEach(e -> resultArrayList.add(e.getKey()));
return resultArrayList;
}
public void testGetKeyArray() {
String testInput;
testInput = "ABDCEFG";
System.out.println("Test getKeyArray with " + testInput);
getKeyArray(testInput).forEach(System.out::println);
testInput = "DUDE";
System.out.println("Test getKeyArray with " + testInput);
getKeyArray(testInput).forEach(System.out::println);
}
"GFEABCD" Result: [3, 4, 5, 6, 2, 1, 0]
"ABDCEFG" Result: [0, 1, 3, 2, 4, 5, 6]