在java中编码给定字母表的单词

hfsqlsce  于 2022-11-20  发布在  Java
关注(0)|答案(1)|浏览(198)

我正在尝试做一个方法,允许我把一个单词传递给数字考虑字符数组这是我的方法和字母表给:
第一个
然而,当我比较并打印数组时,我得到的是排序后的单词。例如,如果我想对单词“acbd”进行编码,输出是:[A,B,C,D]我不知道如何才能使单词以正确的顺序返回。
我不知道我可以尝试做什么来执行这个方法,因为我不明白为什么这个词是命令我。

eyh26e7m

eyh26e7m1#

要使其正常工作,需要做一些事情。您要转换的字符都是大写,但提供的消息字符串是小写。为了进行相等性比较,它们必须是相同的字母大小写。记住这一点,将代码行if (CHARACTERS_SPACE[i] == c){更改为如下所示:if (charactersSpace[i] == Character.toUpperCase(c)) {将更有利于整个任务。
同样,在同一个if块中,应将什么添加到msgToNumber数组列表中(一个decieving变量名)不是c,而应该是CHARACTERS_SPACE[i]break;语句也可以直接添加到现在的msgToNumbers.add(CHARACTERS_SPACE[i]);下,因为该字符已经被找到,并且当前字符不需要更多的内部循环迭代。这将有助于加快一点事情。
因此,为了保持所提供的msg字符串中字符的顺序,内部的for循环声明应该移动,以构成一个外部循环。换句话说,外部和内部循环声明应该交换位置,例如:

public static void codificate(String msg) {
    String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ";   
    final char[] charactersSpace = chars.toCharArray();
    
    char[] msgChar = msg.toCharArray();
    List<Character> msgToNumbers = new ArrayList<>();

    for (char c : msgChar) {
        for (int i = 0; i < charactersSpace.length; i++) {
            if (charactersSpace[i] == Character.toUpperCase(c)) {
                msgToNumbers.add(charactersSpace[i]);
                break;
            }
        }
    }
    System.out.println(msgToNumbers);
}

还要注意代码行System.out.println(msgToNumbers);被移到了外部for循环之外的.......。这样,在每次外部循环迭代时,msgToNumbers列表不会被输出到控制台窗口。

在一侧:

如果你想让上面的方法返回一个字符串,而不是从方法内部执行控制台打印,那么你可以这样修改:

public static String codificate(String msg) {
    String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ";   
    final char[] charactersSpace = chars.toCharArray();
    
    char[] msgChar = msg.toCharArray();
    List<Character> msgToNumbers = new ArrayList<>();

    for (char c : msgChar) {
        for (int i = 0; i < charactersSpace.length; i++) {
            if (charactersSpace[i] == Character.toUpperCase(c)) {
                msgToNumbers.add(charactersSpace[i]);
                break;
            }
        }
    }
    return msgToNumbers.toString().replaceAll("[\\[\\], ]", "");
}

您可以使用以下方法:

String str = codificate("adcb");
System.out.println(str);

控制台窗口将显示:
ADCB系统

相关问题