2012-09-11 46 views
1

我需要我的chiper實驗室的幫助。我的指令是:無法讓我的密碼實驗室工作

Write a program that accepts any number of strings as command-line arguments and displays those strings encrypted with the Atbash cipher. You program should be as modular as possible and use good object oriented programming techniques. Your program must be thoroughly documented using javadoc comments.

我有String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";應該編碼字符串,這樣一個將返回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

我假設這裏沒關係? – arshajii

+0

它會幫助,如果你告訴我們當你決定運行你的程序會發生什麼 –

+0

這是我在eclipse中運行時給我的東西......線程「main」中的異常java.lang.Error:未解決的編譯問題: (CaesarCipher.java:5) – yulana

回答

-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; } 
    } 

} 
+2

**如果不是在作業作業(標題本身表示的作業)時給出整個代碼,並將人員指向正確的方向呢?您現在已經提供了有關如何複製和粘貼代碼的良好教育,以避免學習。工作很好。 –

+0

A.R.S我只是試過它,但它不會給我任何東西在控制檯...請向我解釋我想在我的控制檯加密時,當我運行我的程序或即時通訊只是寫代碼? – yulana

+1

它在題目「我的密碼實驗室」和第一句話「我的密碼實驗室」中說,和「我的指令是」帶有引用的作業,表明它是一個班級作業。這部分是什麼表示除了作業以外的任何東西? –

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 
    } 
} 

你可以選擇無論是在構造函數中進行加密時,打印方法或其他方式。

+0

確定薩姆讓我嘗試編碼我的實驗室,我會看看它會給我什麼 – yulana

+0

+1。這是回答這類問題的更好方法。不錯的工作。 :-) –