首页 > 解决方案 > Java中的字母数字凯撒密码

问题描述

我正在尝试用 Java 解决 Caesar's Cipher,但它有一个转折点。输入字符串具有字母数字值,我无法解决。这是我到目前为止所尝试的:

  String rotationalCipher(String input, int rotationFactor) {
    // Write your code here
    StringBuilder sb = new StringBuilder();
    for(int i = 0; i < input.length(); i++) {
      if(Character.isLowerCase(input.charAt(i))) {
         char ch = (char)(((int)input.charAt(i) + rotationFactor - 97) % 26 + 97); 
      } else if (Character.isUpperCase(input.charAt(i))) {
          char ch = (char)(((int)input.charAt(i) + rotationFactor - 65) % 26 + 65); 
          sb.append(ch); 
      } else {
          char ch = (char)(((int)input.charAt(i) + rotationFactor - 48) % 10 + 48); 
          sb.append(ch); 
      }
    }
      return sb.toString();
  }

我想要做的是使用它的 ASCII 值评估每个案例,但我似乎没有得到想要的输出。我使用 ASCII 错误吗?谢谢你的帮助!

Sample input/output:
input = Zebra-493?
rotationFactor = 3
output = Cheud-726?

标签: javacaesar-cipher

解决方案


你有两个主要问题。

  • 您没有StringBuilder使用append小写转换进行更新。
  • 您需要isDigit像大写和小写一样专门处理数字,以便您可以忽略 - 和?

几个建议。

  • 只需在您第一次进入循环时分配ch,然后在整个循环中使用它。无需继续输入所有输入内容。
  • 退出块时,仅ch在接近尾声时附加到 StringBuilder 一次。if/else
  • 而不是像 97 和 65 这样的数字使用“a”和“A”。那样犯错误的可能性较小。

进行这些更改后,您的代码就可以正常工作。


推荐阅读