Java - 帮助将字母转换为整数,加 5,然后转换回字母
Java - Help converting letter to integer, adding 5, then converting back to letter
首先,这是我到目前为止的代码
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”。它只是将它们全部加起来。
任何帮助将不胜感激,如有必要,我可以 post 完整代码。
//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);
希望这就是您要找的。
几个问题 -
首先 - eNum = (int) - (int)'a' + 5;
你不需要第一个 (int) -
我相信,你可以做到 - eNum = (int)c + 5;
。您的表达式总是会产生负整数。
而不是 returning eNum
你应该将它转换为字符并将其添加到字符串和 return 最后的字符串(或者你可以创建与 string 长度相同的字符数组,继续将字符存储在数组中,return 从字符数组创建的字符串)。
而不是在条件中使用 a
,您应该使用 c
,它表示 ith
索引处的当前字符。
我猜你的代码中并非所有变量都是 class 的成员变量(实例变量),所以你应该在代码中用数据类型定义它们。
代码更改示例 -
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;
尝试这样的事情,我相信这有几个好处:
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
更有效
首先,这是我到目前为止的代码
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”。它只是将它们全部加起来。
任何帮助将不胜感激,如有必要,我可以 post 完整代码。
//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);
希望这就是您要找的。
几个问题 -
首先 -
eNum = (int) - (int)'a' + 5;
你不需要第一个(int) -
我相信,你可以做到 -eNum = (int)c + 5;
。您的表达式总是会产生负整数。而不是 returning
eNum
你应该将它转换为字符并将其添加到字符串和 return 最后的字符串(或者你可以创建与 string 长度相同的字符数组,继续将字符存储在数组中,return 从字符数组创建的字符串)。而不是在条件中使用
a
,您应该使用c
,它表示ith
索引处的当前字符。我猜你的代码中并非所有变量都是 class 的成员变量(实例变量),所以你应该在代码中用数据类型定义它们。
代码更改示例 -
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;
尝试这样的事情,我相信这有几个好处:
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