LauTN 2013-03-06 17:17 采纳率: 0%
浏览 2903
已采纳

字符串加密排序问题(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;
    }
  • 写回答

4条回答 默认 最新

  • LauTN 2013-03-11 09:01
    关注

    自问自答

    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站