Java程序:对混杂的字母,按字典顺序输出

随机生成20个长为12~20的字母混杂的"单词",按字典顺序输出

何为字典顺序?

按照字典顺序排序时,小写的‘a’和大写的‘A’哪个排在前面啊?
系统实际上是根据ASCII来排的,具体如下:
0-9(对应数值48-59);
A-Z(对应数值65-90);
a-z(对应数值97-122);

对应的数值就知道哪些在前,那些在后了

程序运行截图:



1随机生成一个长度为12-20的大小写字母混杂的“单词”

/**
 * 随机获取长度为12~20的大小写字母混杂的“单词”
 */
private String randomWord() {
    // 12~20长度,包含12及20
    int length = 12 + (int) (Math.random() * 9);
    String word = "";
    for (int i = 0; i < length; i++) {
        word += (char) randomChar();
    }
    return word;
}
/**
 * 随机获取'a'~'z' 和 'A'~ 'Z'中的任一字符
 * 
 * 'A'~ 'Z'对应ASCII值:65~90
 * 
 * 'a'~'z'对应ASCII值:97~122
 * 
 * @return
 */
private byte randomChar() {
    // 0<= Math.random()< 1
    int flag = (int) (Math.random() * 2);// 0小写字母1大写字母
    byte resultBt;
    if (flag == 0) {
        byte bt = (byte) (Math.random() * 26);// 0 <= bt < 26
        resultBt = (byte) (65 + bt);
    } else {
        byte bt = (byte) (Math.random() * 26);// 0 <= bt < 26
        resultBt = (byte) (97 + bt);
    }
    return resultBt;
}


2.for循环生成20个长度为12-20的大小写字母混杂的“单词”


3.按字典顺序进行排序

/**
 * 
 * 由小到大排序
 * 
 * 从后向前冒泡
 * 
 * @param arr
 */
public void bubbleSort(String[] arr) {
    if (arr == null || arr.length == 0)
        return;
    for (int i = 0; i < arr.length - 1; i++) {
        // 循环之后下标i处为数组中最小的元素
        for (int j = arr.length - 1; j > i; j--) {
            if (!compareString(arr[j], arr[j - 1])) {
                swap(arr, j - 1, j);
            }
        }
    }
}
/**
 * 比较两个字符串大小
 * 
 * @param param1
 * @param param2
 * @return true:param1 > param2 false:param1 <= param2;
 */
private boolean compareString(String param1, String param2) {
    char[] paramC1 = param1.toCharArray();
    char[] paramC2 = param2.toCharArray();
    // 获取最短字符串长度
    int minLength = paramC1.length < paramC2.length ? paramC1.length
            : paramC2.length;
    for (int i = 0; i < minLength; i++) {
        if (paramC1[i] == paramC2[i]) {
 
        } else if (paramC1[i] > paramC2[i]) {
            return true;
        } else {
            return false;
        }
    }
    return paramC1.length > paramC2.length;
 
}
/**
 * 交换元素
 * 
 * @param arr数组
 * @param i
 *            数组下标
 * @param j
 *            数组下标
 */
public void swap(String[] arr, int i, int j) {
    String temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

4.测试类

public class StringDemo {
 
    public static void main(String[] args) {
        StringDemo localDemo = new StringDemo();
        String[] words = new String[20];
        System.out.println("随机生成的20个单词:");
        for (int i = 0; i < words.length; i++) {
            words[i] = localDemo.randomWord();
            System.out.println(words[i]);
        }
        localDemo.bubbleSort(words);
        System.out.println();
        System.out.println("按字典顺序打印:");
        for (String word : words) {
            System.out.println(word);
        }
    }
}



  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值