2012-05-17 36 views
0

我的解密程序無法正常工作......破譯工作不正常

public static void decipherMessage() { 

    Scanner sc = new Scanner(in); 

    System.out.println("Enter keyword: "); 
    String decipher = sc.nextLine(); 

    String plain = ("abcdefghijklmnopqrstuvwxyz"); 
    String cipher = decipher + "abcdefghijklmnopqrstuvwxyz"; 

    System.out.println("Enter enciphered message: "); 
    String ciphMsg = sc.nextLine(); 

    String decipherMessage = ciphMsg.toLowerCase(); 

    char[] chars = cipher.toCharArray(); 
    Set<Character> charSet = new LinkedHashSet<Character>(); 

    for (char c : chars) { 
     charSet.add(c); 
    } 

    StringBuilder cMap = new StringBuilder(); 
    for (Character character : charSet) { 
     cMap.append(character); 
     StringBuilder original = cMap; 

    } 
    for (int i = 0; i < 26; i++) 
    { 
     char cipherTextChar = cMap.charAt(i); 
     char plainTextChar = plain.charAt(i); 

     decipherMessage = decipherMessage.replace(cipherTextChar,plainTextChar); 

     System.out.println("Deciphered message"); 
     System.out.println(decipherMessage); 


    } 

明文字母都應該更換加密的信

但是當我運行它,它只是再次給出了加密的消息沒有解密?

示例。

keyword: stack 

plain : abcdefghijklmnopqrstuvwxyz 

cipher: stackbdefghijlmnopqruvwxyz 

message: overflow 

ciphered message: mvhpbimw 

除了相反。 使用我上面顯示的代碼,它只是給出了加密的消息,而沒有解密任何東西。

回答

0

您的代碼不會替換字符,只是不正確(假設的deciphMsg及以上decipherMessage的使用是一個拼寫錯誤。他們應該是同一個變量。)

那麼一個問題是,你正在做的字符串替換一個密碼一次一個字符。

例如,如果我的暗號是「B」,它應該是所有Switch A的和B的,但如果我給它的字符串

abababababab 

首先它會通過B的全部更換一個的給

bbbbbbbbbbbb 

,然後由公司代替所有的b的:

aaaaaaaaaaaa 

這不是預期的OUTC青梅。

解決方案基本上歸結爲做一次更換一個消息字符。你將不得不循環消息。你也可以使用地圖來提高效率。

+0

沒了deciphMsg和decipherMessage是兩回事:( 糟糕的命名規則,我知道。難道不使我的代碼過長? 我不會想被標記下來類似的東西。 – user10

+0

然後'decipherMessage'不宣或者在任何地方初始化'deciphMsg' – trutheality

+0

噢,我的壞 現在修好了 – user10