1

チッパーラボで助けが必要です。私の指示は次のとおりです。

コマンドライン引数として任意の数の文字列を受け入れ、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メイン メソッドがあるクラスのコンストラクターを呼び出すことだけです。

これは非常に紛らわしいコードであり、あまり適切な形式ではありません。

おそらくやりたいことは、ほとんどのコードをメイン メソッドに含めることです。そこからコードを他のクラスに編成することで、「優れたオブジェクト指向プログラミング手法を使用する」ことができます。

私がすることは次のようなものです

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 に答える