Java 使用柱状换位的顺序不正确

Java 使用柱状换位的顺序不正确,java,encryption,Java,Encryption,我正在尝试使用列转置来使用密钥加密文本。 我找到了一个这样做的例子,在我看来是正确的,但它并不像我预期的那样排序。 我学Java才几个月,所以我可能错过了一些东西 我尝试了不同的四个字母字符串,因为我只是建议保留四个字符的键。在某些情况下,但并非所有情况下,它的顺序与预期一致 public static int[] arrangeKey(String key) { String[] keys = key.split(""); Arrays.sort(keys); int[

我正在尝试使用列转置来使用密钥加密文本。 我找到了一个这样做的例子,在我看来是正确的,但它并不像我预期的那样排序。 我学Java才几个月,所以我可能错过了一些东西

我尝试了不同的四个字母字符串,因为我只是建议保留四个字符的键。在某些情况下,但并非所有情况下,它的顺序与预期一致

public static int[] arrangeKey(String key) {
    String[] keys = key.split("");
    Arrays.sort(keys);
    int[] num = new int[key.length()];
    for (int x = 0; x < keys.length; x++) {
        for (int y = 0; y < key.length(); y++) {
            if (keys[x].equals(key.charAt(y) + "")) {
                num[y] = x;
                break;   
            }
        }
    }
    return num;
}
公共静态int[]排列键(字符串键){
String[]keys=key.split(“”);
数组。排序(键);
int[]num=新的int[key.length()];
对于(int x=0;x
使用字符串key=“live”

num数组返回为2130

我希望eilv输出3102的num数组,因为初始数组值是e=3、I=1、l=0、v=2(“live”)
为什么Arrays.sort数组返回2130?

如果需要按照您的要求进行换位(3102表示“live”),则需要指定

num[x] = y
而不是

num[y] = x;
原因是字符的原始位置由变量x保持,排序位置由变量y保持


一个小建议是,适当地命名变量而不是“x”和“y”,这将帮助您更好更快地调试代码。此外,这也让其他人更容易理解。我的意思不是错误的,也不是要冒犯你。只是分享一下我作为开发人员的经验,适当地命名变量和方法会有很大帮助。

感谢您的回复和建议。没有冒犯你的意思,能得到一些有用的指点真是太好了。