A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


从网上找到一份编程练习题,我决定将里面的题目全都做一遍。

/*
        题目:编写一个加密类,在其中实现对字符数组的加密和解密方法。
        加密原理是:
        加密后的字符数组的第一个字符是原字符数组的最后一个字符,
        其余的每个字符是对应的原字符数组中的前一个字符的值加上3。
        比如:{‘w’,’e’,’i’,’c’,’o’,’m’,’e’},末尾的字符为’e’,
        {‘w’,’e’,’i’,’c’,’o’,’m’}依次加上3后成为{‘z’,’h’,’l’,’f’,’r’,’p’},
        故加密后的结果为{‘e’,‘z’,’h’,’l’,’f’,’r’,’p’}
*/

/*
        分析:主要是使用面向对象的思想。但是我面向对象学得很烂,基本上思考方式还是面向过程的。
*/
class SuanFaDemo {

        public static void main(String[] args) {

                System.out.println("------------测试加密功能----------");
                char[] ch_1={'w','e','i','c','o','m','e'};  //待加密串
                SuanFa jiaMi=new SuanFa(ch_1);
                System.out.println("待加密的字符串为:");
                jiaMi.printArray(); //输出待加密串
                System.out.println("加密后的字符串为:");
                SuanFa newJiaMi=jiaMi.encode(); //加密
                newJiaMi.printArray(); //输出加密串

                System.out.println("------------测试解密功能----------");
                char[] ch_2={'e','z','h','l','f','r','p'}; //待解密串
                SuanFa jieMi=new SuanFa(ch_2);
                System.out.println("待解密的字符串为:");
                jieMi.printArray(); //输出待解密串
                System.out.println("解密后的字符串为:");
                SuanFa newJieMi=jieMi.decode(); //解密
                newJieMi.printArray(); //输出解密串
        }
}

class SuanFa {
        private char[] ch;

        public SuanFa(){
        }

        public SuanFa(char[] ch){
                this.ch=ch;
        }

        //加密
        public SuanFa encode(){
                char last=ch[ch.length-1]; //保存最后一个字符
                //将第0~ch.length-2个字符向后移动一位
                for (int i=ch.length-2; i>=0; i--){
                        ch[i+1]=ch;
                }
                //从第1~ch.length-1角标的字符+3
                for (int i=1; i<=ch.length-1; i++){
                        int temp=ch+3;
                        if (temp>122){ //如果大于'z'
                                temp=temp-26; //重新回到'a'
                        }
                        ch=(char)temp;
                }
                ch[0]=(char)last; //将第0个元素补齐
                return new SuanFa(ch);
        }

        //解密
        public SuanFa decode(){
                char first=ch[0]; //获取第一个字符
                //将第1~ch.length-1个字符向前移动一位
                for (int i=0; i<=ch.length-2; i++){
                        ch=ch[i+1];
                }
                //从0~ch.length-2角标的字符-3
                for (int i=0; i<=ch.length-2; i++){
                        int temp=ch-3;
                        if (temp<97){ //如果小于'a'
                                temp=temp+26; //重新回到'z'
                        }
                        ch=(char)temp;
                }
                ch[ch.length-1]=first;
                return new SuanFa(ch);
        }

        //打印串
        public void printArray(){
                System.out.print("{");
                for (int i=0; i<ch.length; i++){
                        if (i<ch.length-1){
                                System.out.print("\'"+ch+"\',");
                        }else{
                                System.out.print("\'"+ch+"\'}");
                        }
                }
                System.out.println();
        }
}

/*
        输出结果:
        ------------测试加密功能----------
        待加密的字符串为:
        {'w','e','i','c','o','m','e'}
        加密后的字符串为:
        {'e','z','h','l','f','r','p'}
        ------------测试解密功能----------
        待解密的字符串为:
        {'e','z','h','l','f','r','p'}
        解密后的字符串为:
        {'w','e','i','c','o','m','e'}
               
*/

评分

参与人数 1黑马币 +1 收起 理由
乐闻 + 1 赞一个!

查看全部评分

2 个回复

正序浏览
帮顶啊啊
回复 使用道具 举报
赞一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马