为什么我的 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);
    }

您需要检查上下字符,然后相应地添加值。