1

首先,这是我到目前为止的代码

    public int encrypt() {
/* This method will apply a simple encrypted algorithm to the text.
 * Replace each character with the character that is five steps away from
 * it in the alphabet. For instance, 'A' becomes 'F', 'Y' becomes '~' and
 * so on. Builds a string with these new encrypted values and returns it.
 */

    text = toLower;
    encrypt = "";
    int eNum = 0;

    for (int i = 0; i <text.length(); i++) {
        c = text.charAt(i);
        if ((Character.isLetter(c))) {

       eNum = (int) - (int)'a' + 5;

        }  
    }


    return eNum;    
}

(text 顺便说一下输入的字符串。toLower 将字符串全部小写,以便于转换。)

我完成了大部分任务,但其中一部分任务是让我将输入的每个字母移动 5 个空格。A变成F,B变成G,以此类推。

到目前为止,我将这封信转换为一个数字,但我在添加它然后将其返回给一个字母时遇到了麻烦。

当我运行程序并输入诸如“abc”之类的输入时,我得到“8”。它只是将它们全部加起来。

任何帮助将不胜感激,如有必要,我可以发布完整的代码。

4

3 回答 3

1

几个问题——

  1. 首先 -我相信你eNum = (int) - (int)'a' + 5;不需要第一个(int) -,你可以做 - eNum = (int)c + 5;。你的表达式总是会产生一个负整数。

  2. 而不是返回eNum,您应该将其转换为字符并将其添加到字符串并在末尾返回字符串(或者您可以创建一个与 string 长度相同的字符数组,继续将字符存储在数组中,并返回一个从字符数组)。

  3. 而不是a在条件中使用,您应该使用which 表示索引c处的当前字符。ith

  4. 我猜您代码中的所有变量并非都是类的成员变量(实例变量),因此您应该在代码中使用数据类型定义它们。

对代码的示例更改 -

String text = toLower; //if toLower is not correct, use a correct variable to get the data to encrypt from.
        String encrypt = "";

    for (int i = 0; i <text.length(); i++) {
        char c = text.charAt(i);
        if ((Character.isLetter(c))) {

       encrypt += (char)((int)c + 5);

        }  
    }


   return encrypt;
于 2015-06-26T20:39:24.660 回答
0
//Just a quick conversion for testing
String yourInput = "AbC".toLowerCase();
String convertedString = "";

for (int i = 0; i <text.length(); i++) {
    char c = yourInput.charAt(i);
    int num = Character.getNumericValue(c);
    num = (num + 5)%128 //If you somehow manage to pass 127, to prevent errors, start at 0 again using modulus
    convertedString += Integer.toString(num);
}
System.out.println(convertedString);

希望这就是你要找的。

于 2015-06-26T20:38:52.160 回答
0

尝试这样的事情,我相信这有几个优点:

public String encrypt(String in) {
    String workingCopy = in.toLowerCase();

    StringBuilder out = new StringBuilder();

    for (int i = 0; i < workingCopy.length(); i++) {
        char c = workingCopy.charAt(i);
        if ((Character.isLetter(c))) {
            out.append((char)(c + 5));
        }
    }

    return out.toString();
}

这段代码有点冗长,但也许这样更容易理解。我介绍了 StringBuilder 因为它比做更有效string = string + x

于 2015-06-26T20:39:30.830 回答