继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

随机生成字符串并排序,java入门第三季6-5练习

二胖爱编程
关注TA
已关注
手记 7
粉丝 10
获赞 63

这里想说的是:独立面对一个问题时,完全没有思路,学过的知识点不能活学活用,很多知识点需要看到别人的提示才能想起来,而自己不能灵活的运用,这应该是编程思想锻炼的还不够,通过多练应该可弥补,见的多了,练得多了,自然也就会形成自己的一套编程习惯。共勉吧,幕友们。
/****知识点总结****/
1,关键是能否想到建立一个用于产生随机字符的基准字符串 String s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
2,随机类 Random的使用,以及常用的产生随机数的方法 nextInt(n); 以及对这个方法的灵活使用,例如:子字符串长度使用该方法产生,但随机字符的选取该怎处理?能否想到使用String类的 charAt(index)方法从基准字符串s中获取随机字符,那么对应的 随机位置 index 是否也能想到使用 nextInt(s.length()) 得到 这是本练习的关键。
3,StringBuilder 类的使用(长度可变,字符串可变 虽然不是线程安全的,单效率高,比较常用) append() 方法的使用。
4,Collections 工具类中 sort() 方法的使用。
5,List 集合接口的使用,常用的实现类 ArrayList (有序可重复)。

package randomStringSort;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class TestRandomStringSort {
    /**
     * 默认排列顺序是:
     * 0-9
     * A-Z
     * a-z
     */
    //创建 泛型 ArrayList 实例 List 是接口,因此只能用实现它的子类来实例化对象
    List<String> stringList = new ArrayList<String>();
    //创建私有 基本字符串 s 用于产生随机子字符串
    private String s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    //创建全局静态 TestRandomStringsort 实例
    static TestRandomStringSort trss = new TestRandomStringSort();
    //创建 Random 类实例 
    private Random random = new Random(); 

    public static void main(String[] args) {
        //调用 添加随机字符串方法
        trss.addRandomString();
        //调用 排序方法
        trss.StringSort();
    }

    private void StringSort() {
        System.out.println("-------------排序前---------------");
        for (int i = 0; i < 10; i++) {
            System.out.println("元素:"+ stringList.get(i));
        }

        //调用 Collections工具类的sort()方法
        Collections.sort(stringList);

        System.out.println("-------------排序后---------------");
        for (int i = 0; i < 10; i++) {
            System.out.println("元素:"+ stringList.get(i));
        }

    }

    //添加随机字符串方法
    private void addRandomString() {
        String subString;
        for (int i = 0;i<10;i++) {
            do {
                //调用生成 长度为10以内随机整数的子字符串的方法
                subString = trss.generateSubString();
            } while (stringList.contains(subString));//判断子串是否重复
            stringList.add(subString);
            System.out.println("将要添加字符串:"+ "'" + subString + "'");  
        }
    }

    //生成随机字符串方法
    private String generateSubString() {
        //使用nextInt()方法生成一个10以内的随机整数,即字符串的随机长度  范围[0,10)
        int randomNum = random.nextInt(10);
        //StringBuilder 虽然线程不安全的,但效率高   创建一个sb实例,用于产生随机长度的字符串
        StringBuilder sb = new StringBuilder();
        //产生随机子字符串
        if (randomNum == 0) {//若子字符串长度为0 则加1 保证 随机产生的子字符串 不为null
            randomNum = 1;
        }

        for (int i = 0;i<randomNum;i++) {
            //产生随机子串,每个字符也是从s基串中随机位置获得的
            /**
            * 随机字符串的每个字符都是随机产生的,那么所有可能的字符 char 都取自 s 中的某一个位置上的char  
            * 所以用nextInt(s.length())来产生一个范围在[0,s.length())的随机位置索引值 
            * 后面再使用charAt(index)方法就可获取随机的一个字符   这点很关键
            */
            int randomCharIndex = random.nextInt(s.length());
            sb.append(s.charAt(randomCharIndex));
        }

        //转换成String类型返回 因为泛型类是String
        return sb.toString();
    }

}

运行结果:
将要添加字符串:'6Hz3lWX6'
将要添加字符串:'jNsMP'
将要添加字符串:'jW'
将要添加字符串:'eRtc9g6Vf'
将要添加字符串:'j9GacY73'
将要添加字符串:'sCojn'
将要添加字符串:'y'
将要添加字符串:'jP'
将要添加字符串:'npf'
将要添加字符串:'gq'
-------------排序前---------------
元素:6Hz3lWX6
元素:jNsMP
元素:jW
元素:eRtc9g6Vf
元素:j9GacY73
元素:sCojn
元素:y
元素:jP
元素:npf
元素:gq
-------------排序后---------------
元素:6Hz3lWX6
元素:eRtc9g6Vf
元素:gq
元素:j9GacY73
元素:jNsMP
元素:jP
元素:jW
元素:npf
元素:sCojn
元素:y

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP