2015-12-11 57 views
1

下面的代碼是爲了解密基於ASCII值的「祕密」 message :mmZ\\dxZmx]ZpgyJava - 爲什麼要打印出「007F」?

它應該打印出來:「黎明突擊」

它是什麼當前打印出來:「在007F黎明時攻擊007F?

所以基本上,現在x = "007F"y = "?"

我需要x = SPACE或 「」,並y = "!"

感謝您的時間。

public class decryption 
{ 
    public static void main(String[] args) 
    { 
     String secretMessage = ":mmZ\\dxZmx]Zpgy"; 
     System.out.println(decryption(secretMessage, 88)); 
    }//end main 

    public static String decryption(String s, int n) 
    { 
     int originalChar, decryptedChar; 
     String message = ""; 
     char c; 

     for(int i = 0; i < s.length(); ++i) 
     { 
      c = s.charAt(i); 
      decryptedChar = (int)c; 
      if(decryptedChar + n > 126) 
       originalChar = 32 + ((decryptedChar + n) - 113); 
        else 
        {originalChar = decryptedChar + n; 
        c = c;} 
      message = message + (char)originalChar; 
     }//end for loop 
     return message; 
    }//end method 
}//end class 

回答

1

我修好了。問題是,> 126的ASCII值是不正確的,所以95的一個簡單的減法修正了decyrption!

public class decryption 
 
{ 
 
public static void main(String[] args) 
 
{ 
 
\t String secretMessage = ":mmZ\\dxZmx]Zpgy"; 
 
\t System.out.println(decryption(secretMessage, 88)); 
 
}//end main 
 

 
public static String decryption(String s, int n) 
 
{ 
 
\t int originalChar, decryptedChar; 
 
\t String message = ""; 
 
\t char c; 
 

 
\t for(int i = 0; i < s.length(); ++i) 
 
\t { 
 
\t \t c = s.charAt(i); 
 
\t \t decryptedChar = (int)c; 
 
\t \t if(decryptedChar + n > 126) 
 
\t \t originalChar = 32 + ((decryptedChar + n) - 113); 
 
\t \t \t  else 
 
\t \t \t \t {originalChar = decryptedChar + n; 
 
\t \t \t \t c = c;} 
 
     if (originalChar > 126) 
 
     originalChar = originalChar - 95; 
 
\t \t message = message + (char)originalChar; 
 
\t }//end for loop 
 
\t return message; 
 
}//end method 
 
}//end class

+0

檢查是否有使用'(焦炭)originalChar'鑄造類型時是無符號,符號的轉換。 –