Java需要很长时间才能将5个字母的单词转换为数字

时间:2015-02-05 23:28:51

标签: java

在我开始之前,我想告诉你,我是Java的初学者,所以请原谅我没有受过教育的错误。我一直在尝试编写一个应用程序来加密消息。在此过程中,输入将转换为数字以允许数学表达式。问题是尝试转换时。实际的代码确实有效,但转换一个5个字母的单词需要相当长的时间,这个单词是“Hello”(需要大约10秒左右)。以下是输入转换的方法。 `

public static  void encrypt(String plainText) {

    Random random = new Random();

    plainText =plainText.toUpperCase();
    char[] storedInput = plainText.toCharArray();
    int[] convertedInput = new int[plainText.length()];


    for (int indexSelector = 0, comparisonNumber = 1; indexSelector < plainText.length();  comparisonNumber++) {
        if( storedInput[indexSelector] == ' ') {
            System.out.print(" <SPACE> ");
        }
        else {
            if( ((int) storedInput[indexSelector]-64) == comparisonNumber) {
                int converter = storedInput[indexSelector] - 64;
                convertedInput[indexSelector] = converter;
                System.out.print(convertedInput[indexSelector]);

            }
            else {
                continue;
            }
        }
    }
}

此代码接受输入(hello),将所有字母转换为大写,然后当我得到整数时,我减去64,因为它返回ASCII整数。在此A变为1之后,B变为2,C变为3,依此类推...... 当我尝试转换hello(或任何其他单词)时,至少需要8秒钟。有关为什么的任何建议?

1 个答案:

答案 0 :(得分:1)

您需要简化程序。 comparisonNumber导致您遇到重大问题,除非您确实知道自己在做什么,否则通常应该避免for循环中的多个变量。即使在专业设置中,我也会考虑,循环中的for一个需要证明其合理性的问题。

在你的情况下,你正在循环comparisonNumber但是从不使用它来做任何事情,只是验证你找到了正确的数字,然后你忽略了它并做了独立于它的操作。由于您没有重置该值,因此它会循环显示所有可能的值,然后继续处理下一个字母。

这是一个可能更接近您所寻找的版本,我只是移除了该变量并将其他所有内容保留原样。

public static  void encrypt(String plainText) {

    Random random = new Random();

    plainText.toUpperCase();
    char[] storedInput = plainText.toCharArray();
    int[] convertedInput = new int[plainText.length()];


    for (int indexSelector = 0; indexSelector < plainText.length();  indexSelector++) {
    if( storedInput[indexSelector] == ' ') {
        System.out.print(" <SPACE> ");
    } else {
        int converter = storedInput[indexSelector] - 64;
        convertedInput[indexSelector] = converter;
        System.out.print(convertedInput[indexSelector]);
        indexSelector++;
    }
}