• 验证码和判断回文(递归)


    一:产生6位的随机验证码(区分大小写)

    思路:1.将62位字符存在字符串中,先产生随机的6位数

               2.用append()定义动态字符串数组,再用charAt()对其进行索引,从而形成随机字符的函数

               3.书写主函数,调用getStringRandom(n)函数,决定产生随机字符的位数

    package identifying_code;
    import java.util.Scanner;
    import java.util.Random;
    
    public class Identifying_Code {
            public static String getStringRandom(int length) {//length表示随机生成几位随机数
                String str="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
                Random random=new Random();
                StringBuffer bf=new StringBuffer();//动态字符串数组
                for(int i=0;i<length;i++)
                {
                    int number=random.nextInt(62);//随机产生0-62的数字
                    bf.append(str.charAt(number));//往动态字符串数组添加
                    //str.charAt(number)索引str中的第number-1个字符
                    //Stringbuffer1.append(Stringbuffer2)是放在一起的,而String1+String2存在于不同的两个地址内存
                }
                return bf.toString();//返回一个以"文本方式表示"此对象的字符串
            }
            public static void main(String[] args) {
                String code="";
                code=getStringRandom(6);
                System.out.println("验证码为:"+code);
                System.out.println("请输入验证码(区分大小写):");
                Scanner sc=new Scanner(System.in);
                String sr=sc.next();
                if(sr.equals(code))
                    System.out.println("验证码正确");
                else
                    System.out.println("验证码错误");
            }
        }
        

    二:用递归判断一个字符串是否为回文序列(回文序列例:level,abba...)

    思路:1.书写递归函数,判断递归得终止条件

               2.将字符串装换成字符数组(用charAt())循环调用,比较是否相等

               3.定义布尔类型,输出布尔类型结果

    方法一:

    package hhj;
    //利用递归判断是否为回文序列
    /**
     * 判断终止条件,循环调用
     */
    import java.util.Scanner;
    public class Hhj{
        public static boolean isTrue(String str,int n) {
           int len=str.length();
           if(n==0||n==1)
               return true;//判断递归终止条件
           else
           {
               if(str.charAt(len-n)==str.charAt(n-1))
                   return isTrue(str,--n);//循环比较
               else 
                   return false;
           }
        }
        public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);
            System.out.println("请输入字符串:");
            String st=sc.next();
            int l=st.length();
            if(isTrue(st,l))//调用isTrue函数
                System.out.println("是回文序列");
            else
                System.out.println("不是回文序列");
        }
    }

    代码测试截图:

    方法二:

    用subString()

    package hu;
    
    import java.util.Scanner;
    
    
    public class Hu {
        public static void main(String[] args) {
         String str="";
         System.out.println("请输入字符串:");
         Scanner sc=new Scanner(System.in);
         str=sc.nextLine();
        // System.out.println(StringHuwen(str));    
         if(StringHuwen(str))
             System.out.println("是回文序列");
         else
             System.out.println("不是回文序列");
        }
        public static boolean StringHuwen(String str) {
            int len=str.length();
            if(len==0||len==1)
                return true;
            char first=str.charAt(0);
            char last=str.charAt(len-1);
            if(first!=last)
                return false;
            return StringHuwen(str.substring(1,len-1));
        }
    }

    代码测试截图:

    subString(a,b)截取字符串从位置a截取到b,但是不包括b;

    例题:String str=“123456789”;

              str.subString(0)——>123456789

              str.subString(1)——>23456789

         str.subString(0,1)——>1

              str.subString(0,4)——>1234

  • 相关阅读:
    [LeetCode] 1898. Maximum Number of Removable Characters
    [LeetCode] 1897. Redistribute Characters to Make All Strings Equal
    [LeetCode] 1400. Construct K Palindrome Strings
    235. 二叉搜索树的最近公共祖先
    349. 两个数组的交集
    海量数据TOPK 问题
    121. 买卖股票的最佳时机
    删除数组中为0元素
    这行字符串中出现频率最高的字符
    50. Pow(x, n)
  • 原文地址:https://www.cnblogs.com/hhjing/p/11575159.html
Copyright © 2020-2023  润新知