程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> encryption-字符串加密排序問題(char) (ch + key) % 26 )錯誤在何處?為什麼要加上A

encryption-字符串加密排序問題(char) (ch + key) % 26 )錯誤在何處?為什麼要加上A

編輯:編程綜合問答
字符串加密排序問題(char) (ch + key) % 26 )錯誤在何處?為什麼要加上'A'

謝謝各位,這段代碼正負數KEY和運算方式我都明白,唯一不明白的是'A'的作用。
問題一:下面有兩段代碼,其中代碼A運行時是錯的,但我不明白錯誤在何處。
問題二:代碼B是正確的,但我不明白為什麼需要先減去'A',然後求余數之後再加上'A'.這個'A'是什麼作用?為什麼刪除之後就運行出錯呢(問題一)?
Code A (ch + key) % 26 )
Code B ('A' + ((ch -'A' + key) % 26))

     public void run() {    
        setFont("Arial-PLAIN-24");
        String line = readLine ("Enter line: ");
        int key = readInt ("Enter key: ");
        String siphertext = encryptCaesar(line , key);
        println("The result is: " + siphertext);
        String newplain = encryptCaesar(siphertext , -key);
        println("newplain:" + newplain);    
    }

    private String encryptCaesar(String str , int key){
        if(key < 0){
            key = 26 - ( -key % 26 );
        }

        String result = "";
        for(int i = 0; i < str.length(); i++){
            char ch = str.charAt(i);        
            result += encryptChar(ch,key);
        }
        return result;
    }

    private char encryptChar(char ch, int key){
        if(Character.isUpperCase(ch)){
            return ( (char) ('A' + ((ch -'A' + key) % 26)) );
        }
        return ch;
    }

最佳回答:


自問自答

A-Z並不對應十進制的1-26,而是對應十進制中的65-90。所以ch需要減去65也就是'A',才能准確的求出余數。

栗子:假設 key = 2; ch = ‘B’;
’B'的數字不是2,是66。CODE[A]的計算必然不正確。

’A‘ + ('B' - ‘A' + key)% 26 即 65 + (66 - 65 + 2) % 26

('B'' + key)% 26 即 (66 + 2) % 26

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved