五一七教育网
您的当前位置:首页java随机数的产生

java随机数的产生

来源:五一七教育网
java随机数的产生(转载) 2010-01-07 18:28

当测试Java程序时,可能需要随机产生String数据以便放入到数据库中或用作一个方法的测试参数。完成此任务的一种方法是产生随机的int值并将这些值作为数组的索引来创建字符,如下面的代码所示:

public String getRandomString(int length) {

StringBuffer result = new StringBuffer(); Random rand = new Random();

char[] letters = \"abcdefghijklmnopqrstuvwxyz\".toCharArray(); for (int i=0; iresult.append( letters[rand.nextInt(26)] ); }

return result.toString();

}

开放源代码的Jakarta Commons Lang项目包含一些和java.lang包中的类(如String)一起使用的实用程序。在此项目中有一个叫做

org.apache.commons.lang.Random StringUtils的类,它包含很多可以用于产生随机文本的静态实用程序方法。randomAlphanumeric方法可用于创建一个指定长度的随机文本。这个类最常用的random方法能利用用户自己的随机源和供字符数据来创建文本。下面的代码产生一个随机的字符String和一个随机的口令 (cvcvcv)。

import org.apache.commons.lang.RandomStringUtils; // create a 100-character alphanumeric string

String tenAlphaNums = RandomStringUtils.randomAlphanumeric(100); // create a semi-pronounceable password String consonants = \"bcdfghjklmnpqrstvwxz\"; String vowels = \"aeiouy\"; String password =

RandomStringUtils.random(1, consonants) + RandomStringUtils.random(1, vowels) + RandomStringUtils.random(1, consonants) + RandomStringUtils.random(1, vowels) + RandomStringUtils.random(1, consonants) + RandomStringUtils.random(1, vowels);

多次运行上述代码来产生如下的值:pafesu、bydiro、nomyme、wosaha和

hofojy(若单词与实际语言中的单词或短语有雷同纯属偶然)。

有时随机文本必须包含取自某个特定列表中的值。可以向ArrayList添加数据项并通过使用如下的代码从此列表中选择一个随机的数据项:

import java.util.*;

ArrayList list = new ArrayList(); list.add(\"Jim\"); list.add(\"Bob\"); list.add(\"Mary\"); list.add(\"Tom\");

Random rand = new Random();

String randomName = list.get(rand.nextInt(list.size()));

若应用程序需要一个随机出现的唯一值,则可以使用

java.util.Collections的shuffle方法完成此操作。即用String值填充一个列表(List),调用shuffle方法打乱它们的次序并按照新次序使用它们:

ArrayList words = new ArrayList(); words.add(\"shuffling\"); words.add(\"randomness\"); words.add(\"collection\"); words.add(\"string\"); Collections.shuffle(words); System.out.println(words);

shuffle 方法会影响原始的列表,因此如果这会带来问题,那么可以使用一个它的副本。例如,如果需要从常见的英语单词、名或姓氏的列表中进行选择,可以参考本书网站提供的示例。你能够获得包含这些单词的文件并可以将它们加载到一个可以从中选择随机项的ArrayList中。参看“使用Scanner类分析复杂的语法 ”一节来了解一种方法以便将源自1990年美国人口普查的名字分布数据读取到一个ArrayList中。随后可以随机地从此列表中选择人名。此外还可以参考第5章中讨论的Colt API以便了解提供各种类型的随机分布的类。

因篇幅问题不能全部显示,请点此查看更多更全内容