1

我的 Chiper 实验室需要帮助。我的指示是:

编写一个程序,接受任意数量的字符串作为命令行参数,并显示那些用 Atbash 密码加密的字符串。您的程序应该尽可能模块化,并使用良好的面向对象编程技术。必须使用 javadoc 注释彻底记录您的程序。

我有String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";应该对字符串进行编码,以便 A 返回 Z 而 B 将返回 Y 等等。我在 Eclipse 中做了我的密码实验室,但它没有运行。我不确定我做错了什么。

public class CaesarCipher {
  public static void main(String[] args) {
    CaesarCipher cc = new CaesarCipher();
  }

  public static final int ALPHASIZE = 26;
  public static final char [] alpha = {'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'};
  protected char[] encrypt = new char[ALPHASIZE];
  protected char[] decrypt = new char[ALPHASIZE];

  public CaesarCipher() {
    for (int i=0; i<ALPHASIZE; i++)
      encrypt[i] = alpha[(i + 3) % ALPHASIZE];
    for (int i=0; i<ALPHASIZE; i++)
      decrypt[encrypt[i] - 'A'] = alpha[i];
  }

  /** Encryption Method */
  public String encrypt(String secret) {
    char[] mess = secret.toCharArray();
    for (int i=0; i<mess.length; i++)
      if (Character.isUpperCase(mess[i]))
        mess[i] = encrypt[mess[i] - 'A'];
    return new String(mess);
  }

  /** Decryption Method */
  public String decrypt(String secret) {
    char[] mess = secret.toCharArray();
    for (int i=0; i<mess.length; i++)
      if (Character.isUpperCase(mess[i]))
        mess[i] = decrypt[mess[i] - 'A'];
    return new String(mess);
  }  
 }
4

2 回答 2

1

您的main方法所做的只是调用您的主要方法所在的类的构造函数。

这是非常令人困惑的代码,而且形式不是很好。

您可能想要做的是将大部分代码包含在您的 main 方法中。您可以通过将代码从那里组织到其他类中来使用“使用良好的面向对象编程技术”。

我会做的是

public class CaesarCipher 
{
    public static void main(String[] args) 
    {
        for(int i=0; i<args.length; i++)
        {
            Cypher cypher = new Cypher(args[i]);
            System.Out.Println(cypher.Print());
        }
    }
}

然后在另一个文件中(或者同一个文件也可以)

public class Cypher
{
    // fields to represent your cypher

    public Cypher(String s)
    {
        //load the input string into your cypher here.  
    }

    public String Print()
    {
        //print the encrypted string
    }
}

您可以选择在构造函数、打印方法或其他方式中进行加密。

于 2012-09-11T20:34:46.903 回答
-1

试试这个:

public class CaesarCipher {

    private static final int A = (int)'A';
    private static final int Z = (int)'Z';

    public static void main(String[] args) {
        for (String s : args)
            System.out.println(new Encoder(s));
    }

    private static class Encoder {
        private String encoded;
        public Encoder(String s) {
            s = s.toUpperCase();
            StringBuilder sb = new StringBuilder();
            for (char c : s.toCharArray())
                sb.append((char)(A + Z - (int)c));
            encoded = sb.toString();
        }

        @Override
        public String toString() { return encoded; }
    }

}
于 2012-09-11T20:28:54.103 回答