1

下面的代码显示了我的程序的一部分。我正在尝试为一个小挑战创建一个 atbash 加密(atbash 是一种加密方法;例如,我输入“hello”,程序将输出“svool”。它颠倒了字母顺序。更多信息:http://en .wikipedia.org/wiki/Atbash

该程序工作......有点,当我输入“abcdef”时,程序输出“zyxwvu”。但是,假设我想输入一个实际的单词。该程序不会循环遍历数组,只会输出“test”(它不应该这样做)。我该如何解决?

char letter1 [] = new char [] {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char letter2 [] = new char [] {'z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'};

      for (int i = 0 ; i < input.length() ; i++)
      {
        if(i == input.length()) {
          break;
        }
        if (input.charAt(i) == letter1[i]) {
          input.setCharAt(i, letter2[i]);
          System.out.println (input);
        }
        else if (input.charAt(i) != letter1[i]){
          System.out.println ("test");

        }
      }
4

2 回答 2

2

您需要另一个循环来匹配input所有替换可能性的每个字符。

以及break;永远无法到达的部分。;)

char letter1 [] = new char [] {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char letter2 [] = new char [] {'z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'};

for (int i = 0 ; i < input.length() ; i++)
{
  for (int j = 0; j < letter1.length; j++) {
    if (input.charAt(i) == letter1[j]) {
      input.setCharAt(i, letter2[j]);
    }
  }
}

如果您总是想要这种“翻译”(将“az”映射到“za”),还有一种更简单的方法:

for (int i = 0 ; i < input.length() ; i++)
{
   input.setCharAt(i, (char)('z' - (input.charAt(i) - 'a')));
}
于 2013-09-15T13:16:31.147 回答
0

我认为您不需要精心查找即可获得Atbash加密。

这是一种更简单的方法。

String input = "hello";
StringBuilder output = new StringBuilder();

for (char c : input.toCharArray()) {
    char rev = (char)(('z' - c) + 'a');
    output.append(rev);
}

System.out.println(output);

对于hello,输出为svool

于 2013-09-15T13:29:28.780 回答