为什么我的 Java 凯撒密码程序返回空字符串?
Why is my Java program for the Caesar cipher returning empty Strings?
我正在尝试创建一个可以对输入字符串实施凯撒密码的程序。代码可以编译,但是,当我测试它时,它总是 returns 一个显示为“”的空字符串。我不知道如何解决这个问题。我迫切需要一些建议。非常感谢你。我已经用到目前为止收到的答案对其进行了编辑,但问题仍然存在。这是我的代码。:
public static String caesarCipher (String cipher, int shiftAmount) {
StringBuilder str = new StringBuilder();
for (int index = 0; index < cipher.length; index = index + 1 ){
char letter = cipher.charAt(index);
if (Character.isUpperCase(letter)){
letter = (char)(((int) letter - 'A' + shiftAmount) % 26 + 'A');
}
else if (Character.isLowerCase(letter)){
letter = (char)(((int) letter - 'a' + shiftAmount) % 26 + 'a');
}
else if (Character.isDigit(letter)){
letter = letter + shiftAmount;
}
str.append(letter);
}
return str.toString();
}
这是我在交互中所做的以及返回的结果:
> HW2.caesarCipher("Character", 1)
""
我想做的是让它returns“Dibsbdufs”。
你的逻辑似乎不正确。为了按一定数量移动字符,您需要获取 ASCII 代码并将移动数量添加到其中。
char x = ((int) 'A' - 65 + 3) % 26 + 65;
在这里,我通过按整数类型转换它然后减去 65('A' 的 ASCII)来获取 A 的 ASCII 值,然后将移位值添加到它。如果只需要在字母表中进行移位,那么您需要通过执行 mod 26 来环绕这些值。因为如果我找到 'Z' 的移位值 3,那么我将得到 ']'。
for (int index = 0; index < cipher.length(); index = index + 1 ){
char letter = cipher.charAt(index);
if (Character.isUpperCase(letter)) {
letter = (char) (((int) letter - 65 + shiftAmount) % 26 + 65);
}
else if (Character.isLowerCase(letter)) {
letter = (char)(((int) letter - 97 + shiftAmount) % 26 + 97);
}
str.append(letter);
}
您需要检查上下字符,然后相应地添加值。
我正在尝试创建一个可以对输入字符串实施凯撒密码的程序。代码可以编译,但是,当我测试它时,它总是 returns 一个显示为“”的空字符串。我不知道如何解决这个问题。我迫切需要一些建议。非常感谢你。我已经用到目前为止收到的答案对其进行了编辑,但问题仍然存在。这是我的代码。:
public static String caesarCipher (String cipher, int shiftAmount) {
StringBuilder str = new StringBuilder();
for (int index = 0; index < cipher.length; index = index + 1 ){
char letter = cipher.charAt(index);
if (Character.isUpperCase(letter)){
letter = (char)(((int) letter - 'A' + shiftAmount) % 26 + 'A');
}
else if (Character.isLowerCase(letter)){
letter = (char)(((int) letter - 'a' + shiftAmount) % 26 + 'a');
}
else if (Character.isDigit(letter)){
letter = letter + shiftAmount;
}
str.append(letter);
}
return str.toString();
}
这是我在交互中所做的以及返回的结果:
> HW2.caesarCipher("Character", 1)
""
我想做的是让它returns“Dibsbdufs”。
你的逻辑似乎不正确。为了按一定数量移动字符,您需要获取 ASCII 代码并将移动数量添加到其中。
char x = ((int) 'A' - 65 + 3) % 26 + 65;
在这里,我通过按整数类型转换它然后减去 65('A' 的 ASCII)来获取 A 的 ASCII 值,然后将移位值添加到它。如果只需要在字母表中进行移位,那么您需要通过执行 mod 26 来环绕这些值。因为如果我找到 'Z' 的移位值 3,那么我将得到 ']'。
for (int index = 0; index < cipher.length(); index = index + 1 ){
char letter = cipher.charAt(index);
if (Character.isUpperCase(letter)) {
letter = (char) (((int) letter - 65 + shiftAmount) % 26 + 65);
}
else if (Character.isLowerCase(letter)) {
letter = (char)(((int) letter - 97 + shiftAmount) % 26 + 97);
}
str.append(letter);
}
您需要检查上下字符,然后相应地添加值。