zoukankan      html  css  js  c++  java
  • 4动手动脑,总结及凯撒加密

    一、StringEquals.java

      1.源代码

    public class StringEquals {
    
    /**  * @param args the command line arguments*/
    
    public static void main(String[] args) {
    
    String s1=new String("Hello");
    
    String s2=new String("Hello");
    
    System.out.println(s1==s2);
    
    System.out.println(s1.equals(s2)); 
    
    String s3="Hello";
          
    String s4="Hello";
    
    System.out.println(s3==s4);
    
    System.out.println(s3.equals(s4));
    
    }
    
    }

      2.运行结果截图

     

    3.分析Java中的equals和==

    n==m结果为true,变量n和m存储的值都为3,所以是相等的。但str1和str2两次比较的结果不同,这是因为基本数据类型变量和非基本数据类型变量存在区别。Java里的8种基本数据类型:整型(byte,short,int,long)、浮点型(float,double)、字符型(char)、布尔型(boolean),对于这8种基本数据类型的变量,变量直接存储的是值,因此在用关系操作符==来进行比较时,比较的就是值本身。要注意浮点型和整型都是有符号类型的,而char是无符号类型的(char类型取值范围为0~2^16-1)。

    例:

        Int n=3;

        Int m=3;

    变量n和m都是直接存储的“3”数值,所以用==比较的时候输出结果为true.

    而对于非基本数据类型的变量,比如源代码里的str1就是引用类型的变量,引用类型的变量存储的并不是 “值”本身,而是于其关联的对象在内存中的地址。

    例:

         String str1;

    这句话声明了一个引用类型的变量,此时它并没有和任何对象关联。而 通过new String("hello")来产生一个对象(也称作为类String的一个实例),并将这个对象和str1进行绑定:str1= new String("hello");那么str1指向了一个对象(很多地方也把str1称作为对象的引用),此时变量str1中存储的是它指向的对象在内存中的存储地址,并不是“值”本身,也就是说并不是直接存储的字符串"hello"。因此在用==str1str2进行第一次比较时,得到的结果是false。因此它们分别指向的是不同的对象,也就是说它们实际存储的内存地址不同。而在第二次比较时,都让str1和str2指向了str指向的对象,那么得到的结果毫无疑问是true。

    而第三个输出结果为true,是因为String类对equals方法进行了重写,用来比较指向的字符串对象所存储的字符串是否相等。

    4.总结

    1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址

    2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

    二、String类的Length()charAt()、 getChars()replace()、 toUpperCase()、 toLowerCase()trim()toCharArray()使用说明

    1.Length()

       计算字符串长度。

    2.charAt()

      获取指定位置的字符

    3.getChars()

    获取从指定位置起的子串复制到字符数组中,比如 s1.getChars( 0, 5, charArray, 0 );四个参数的含义:

    1)被拷贝字符在字串中的起始位置。

         2)被拷贝的最后一个字符在字串中的下标再加1

         3)目标字符数组。

         4)拷贝的字符放在字符数组中的起始下标。

    4.replace()

       子串替换,replaceoldstringnewstring);用新字符串代替旧字符串。

    5.toUpperCase()toLowerCase()

      大小写转换,比如str.toUpperCase();str中所有小写转换成大写。

    6.trim()

       去除头尾空格,比如str=” abc ”,str.trim();abc头尾的空格去掉。

    7.toCharArray()将字符串对象转换为字符数组,str.toCharArray();str转换成char数组。

    三、程序题(课后作业之字串加密)

    1、实验题目

       使用上述算法加密或解密用户输入的英文字串

    2、需求分析

         加密的基本思路是:通过把字母移动3位数来实现加密解密。例如原码字母A变成密码的D,依次类推,原码B变成密码E。如果有一个原码字符串为“Hello”,其密码为“Khoor”,那么要加密的话,就将字母向相反方向移动同样位数即可。即密码“Khoor”的每个字母向左移动三位变成“Hello”,由此看来位数3为加密解密的密钥。

    3、思路

          程序中包含两个类,程序起始类Caesar和类JiaJie。类JiaJie中包含两个方法,public void jia()用于对字符串进行加密,从控制台获得待加密的字符串,定义key=3,利用for循环,将字符串的每一个元素都存入数组中,然后对数组的每一个元素进行加密,再使用两个if...else语句判断是大写还是小写字母,接着判断如果该元素是Xx)、Yy)、Zz)则分别替换为A(a)B(b)C(c),否则字母向后移动3,最后输出结果。public void jie()用于对字符串进行解密,方法与加密类似。程序起始类Caesar主要用于调用方法,

    4、程序流程图

     

    5、源代码

    import java.util.*;
    
     
    
    public class Caesar {  
    
    void mj(){
    
    Scanner in = new Scanner(System.in); 
    
            System.out.print("1.加密;2.解密。请选择:");          
    
            int n=in.nextInt(); //键盘输入操作序号    
    
            
    
            //加密
    
            if(n == 1){ 
    
                System.out.print("输入待加密的字符串:");              
    
                String str = in.next();//键盘输入字符串         
    
                String jm="";              
    
                int key = 3; //密钥
    
                for(int i = 0;i < str.length();i++)
    
                {                  
    
                 char c = str.charAt(i);                  
    
                 if(c >= 'a'&&c <= 'z')
    
                 {                   
    
                 if(c>='x'&&c<='z')
    
                 {                    
    
                 c-=26;                    
    
                 c+=key; 
    
                     }                  
    
                 else{                    
    
                 c+=key;                   
    
                 } 
    
                    } 
    
                    else if(c >= 'A'&&c <= 'Z')
    
                    {                   
    
                     if(c>='X'&&c<='Z')
    
                     {                    
    
                     c-=26;                    
    
                     c+=key; 
    
                     }                   
    
                     else{                    
    
                     c+=key;                   
    
                     } 
    
                    }                                   
    
                 jm += c;              
    
                 } 
    
                System.out.print("加密后的字符串是:"+jm); 
    
                System.out.print("
    继续,输入1;结束,输入0。请选择:");              
    
                n=in.nextInt();             
    
              
    
                if(n==1){ 
    
                 this.mj();              
    
                 }  
    
                if(n==0){ 
    
                    System.out.print("程序结束!");              
    
                    }    
    
                } 
    
            
    
            //解密
    
            else if(n == 2){ 
    
                System.out.print("请输入待解密的字符串:");             
    
                String str = in.next();              
    
                String jm="";              
    
                int key = -3; 
    
                for(int i = 0;i < str.length();i++){                  
    
                 char c = str.charAt(i);                  
    
                 if(c >= 'a'&&c <= 'z'){                   
    
                 if(c>='a'&&c<='c'){                    
    
                 c+=26;                    
    
                 c+=key; 
    
                     }                   
    
                 else{                    
    
                 c+=key;                   
    
                 } 
    
                    } 
    
                    else if(c >= 'A'&&c <= 'Z'){                   
    
                     if(c>='A'&&c<='C'){                    
    
                     c+=26;                    
    
                     c+=key; 
    
                     }                   
    
                     else{                    
    
                     c+=key;                   
    
                     } 
    
                    }                                   
    
                 jm += c;              } 
    
              System.out.println("解密后的字符串:"+jm); 
    
              System.out.print("
    继续,输入1;结束,输入0。请选择:");            
    
              n=in.nextInt(); 
    
              if(n==0)
    
              {          
    
               System.out.print("结束程序!"); 
    
              }            
    
              else
    
              {          
    
               this.mj(); 
    
              }        
    
              } 
    
            } 
    
     
    
     
    
        public static void main(String[] args) {     
    
         Caesar mj=new Caesar();   
    
            mj.mj();          
    
            }  
    
    } 

    6、运行结果截图

           

     

  • 相关阅读:
    LQB201803乘积尾零
    最大公约数
    快速幂运算
    二分法查找原理
    递归-24点
    递归-爬楼梯
    递归-中项表达式求解
    IDEA的安装基本使用
    SSM和开源框架 ------面试指导
    JDK 8 新特性
  • 原文地址:https://www.cnblogs.com/LL66/p/4906389.html
Copyright © 2011-2022 走看看