我的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);
}
}
答案 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; }
}
}