凯撒语中的字母数字密码

问题描述 投票:0回答:1

我正在尝试用Java解决Caesar的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?
java caesar-cipher
1个回答
0
投票

您有两个主要问题。

  • 您未使用StringBuilder更新append以进行小写转换。
  • 您需要像大写和小写一样使用isDigit特别处理数字,以便随后可以忽略-和?之类的字符

一些建议。

  • 首先进入循环然后在整个循环中使用它,只需分配ch
  • 仅在末尾附近将ch附加到StringBuilder。
  • 而不是像97和65这样的数字使用'a'和'A'。这样不太可能犯错误。

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

© www.soinside.com 2019 - 2024. All rights reserved.