无法使我的密码实验室工作

时间:2012-09-11 20:19:15

标签: java

我的chiper实验室需要帮助。我的指示是:<​​/ p>

  

编写一个接受任意数量字符串作为命令行的程序   参数并显示使用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);
  }  
 }

2 个答案:

答案 0 :(得分: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
    }
}

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

答案 1 :(得分:-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; }
    }

}