1. Java乱数を生成する方法
Javaには、乱数の3つの一般的な概念があります。
1。System.CurrentTimeMillis()を使用して、現在の時間に長いタイプのミリ秒数を取得します。
2。Math.random()を介して0と1の間の2倍の値を返します。
3。ランダムクラスを通じて乱数を生成します。
2。ランダムAPI説明
1。JavaAPI説明
ランダムクラスのインスタンスは、擬似ランダム数ストリームを生成するために使用されます。このクラスは48ビットシードを使用し、線形合同式を使用して変更します(ドナルドクヌースのコンピュータープログラミングの芸術、第2巻、セクション3.2.1を参照)。
2つのランダムインスタンスが同じシードで作成されている場合、各インスタンスに同じメソッド呼び出しシーケンスが作成され、同じ数字のシーケンスを生成して返すことができます。属性の実装を確保するために、クラスランダムに特定のアルゴリズムが指定されています。
多くのアプリケーションでは、数学クラスのランダムな方法が使いやすくなります。
2。メソッドの概要
ランダム()
新しい乱数ジェネレーターを作成します。
ランダム(長い種子)
単一の長いシードを使用して、新しい乱数ジェネレーターを作成します。
Public Random(Long Seed){SetSeed(Seed);
保護されたint next(intビット)
次の擬似ランダム番号を生成します。
boolean nextboolean()
次の擬似ランダム数を返します。これは、この乱数ジェネレーターのシーケンスから取られた均一に分布したブール値です。
void nextbytes(byte [] bytes)
ランダムなバイトを生成し、ユーザーがサプライされたバイト配列に配置します。
double nextdouble()
次の擬似ランダム数を返します。これは、この乱数ジェネレーターのシーケンスから取られた0.0〜1.0の間に均等に分布する二重値です。
float nextfloat()
次の擬似ランダム数を返します。これは、この乱数ジェネレーターのシーケンスから取られた0.0〜1.0の間に均等に分布するフロート値です。
double nextgaussian()
次の擬似ランダム数を返します。これは、この乱数ジェネレーターのシーケンスから取られたガウス(「通常」)分布であり、平均0.0、標準偏差が1.0です。
int nextint()
次の擬似ランダム数を返します。これは、この乱数ジェネレーターのシーケンスに均等に分布したINT値です。
int nextint(int n)
擬似ランダム数を返します。これは、この乱数ジェネレーターのシーケンスから取得した0(を含む)と指定された値(除く)の間に均等に分布するINT値です。
long nextlong()
次の擬似ランダム数を返します。これは、この乱数ジェネレーターのシーケンスから取られた均一に分布した長い値です。
void setseed(長い種子)
単一の長いシードを使用して、この乱数ジェネレーターの種子を設定します。
3.ランダムクラスの使用手順
1。種子を運ぶことと種子を運ばないことの違い
ランダムクラスの基本的な使用は、ランダムのインスタンスを種子と種子なしで分割することです。
素人の用語では、2つの違いは次のとおりです。
種子の場合、各実行によって生成される結果は同じです。
種子がない場合、生成するものは、実行するたびにランダムであり、パターンはまったくありません。
2.種子のないランダムオブジェクトを作成します
RANDOM RANDOM = new Random();
3.種子のないランダムオブジェクトを作成します
2つの方法があります。
1)ランダムランダム= new Random(555L);
2)ランダムランダム= new Random();
random.setseed(555L);
4。包括的なアプリケーション
以下は、使用状況を示すための最近書かれた乱数ツールクラスです。
コードコピーは次のとおりです。
java.util.randomをインポートします。
/**
*乱数、文字列ツール
*ユーザー:Leizhimin
*日付:2008-11-19 9:43:09
*/
パブリッククラスのrandomutils {
public static final string allchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static final string letterchar = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
public static final string numberChar = "0123456789";
/**
*固定長のランダム文字列を返します(上限と小文字と数字のみを含む)
*
* @param長ランダム文字列長
* @returnランダム文字列
*/
public static string generatestring(int length){
stringbuffer sb = new StringBuffer();
RANDOM RANDOM = new Random();
for(int i = 0; i <length; i ++){
sb.append(allchar.charat(random.nextint(allchar.length())));
}
return sb.tostring();
}
/**
*固定された長さのランダムな純粋な文字列(上限および小文字のみを含む)を返します
*
* @param長ランダム文字列長
* @returnランダム文字列
*/
public static string generatemixstring(int length){
stringbuffer sb = new StringBuffer();
RANDOM RANDOM = new Random();
for(int i = 0; i <length; i ++){
sb.append(allchar.charat(random.nextint(letterchar.length())));
}
return sb.tostring();
}
/**
*固定された長さのランダムな純粋な大文字の文字列を返します(大文字のみを含む)
*
* @param長ランダム文字列長
* @returnランダム文字列
*/
public static string generateLowerString(int length){
return generatemixstring(length).tolowercase();
}
/**
*固定長のランダムな小文字の文字列を返します(大文字と小文字のみを含む)
*
* @param長ランダム文字列長
* @returnランダム文字列
*/
public static string generateupperstring(int length){
return generatemixstring(length).touppercase();
}
/**
*固定長の純粋な0文字列を生成します
*
* @Param Length Stringの長さ
* @return pure 0文字列
*/
public static string generatezerostring(int length){
stringbuffer sb = new StringBuffer();
for(int i = 0; i <length; i ++){
sb.append( '0');
}
return sb.tostring();
}
/**
*数値に基づいて固定長の文字列を生成すると、長さは前の文字列に追加されません。
*
* @param num番号
* @param fixdlenth文字列長
* @return固定長さの文字列
*/
public static string tofixdlengthstring(long num、int fixdlenth){
stringbuffer sb = new StringBuffer();
string strnum = string.valueof(num);
if(fixdlenth -strnum.length()> = 0){
sb.append(generatezerostring(fixdlenth -strnum.length()));
} それ以外 {
新しいruntimeexception( "convert" + num + "を長さの" + fixdlenth + "例外が発生します!");
}
sb.append(strnum);
return sb.tostring();
}
/**
*数値に基づいて固定長の文字列を生成すると、長さは前の文字列に追加されません。
*
* @param num番号
* @param fixdlenth文字列長
* @return固定長さの文字列
*/
public static string tofixdlengthstring(int num、int fixdlenth){
stringbuffer sb = new StringBuffer();
string strnum = string.valueof(num);
if(fixdlenth -strnum.length()> = 0){
sb.append(generatezerostring(fixdlenth -strnum.length()));
} それ以外 {
新しいruntimeexception( "convert" + num + "を長さの" + fixdlenth + "例外が発生します!");
}
sb.append(strnum);
return sb.tostring();
}
public static void main(string [] args){
system.out.println(generatestring(15));
system.out.println(generatemixstring(15));
System.out.println(generateLowerString(15));
system.out.println(generateupperstring(15));
system.out.println(generatezerostring(15));
System.out.println(tofixdlengthstring(123、15));
System.out.println(tofixdLengthString(123L、15));
}
}
実行結果:
vwmbpinbzfgcphg
23hyrahdjkkpwmv
tigowetbwkm1nde
bpz1knejphb115n
0000000000000000
000000000000123
000000000000123
出口コード0で終了したプロセス
6。概要
1。乱数は非常に一般的に使用されています。
2。ランダムなクラスオブジェクトは、種子が同じである限り、それらが複数回実行し、乱数を生成した結果が常に同じかどうかの違いがあります。
3.乱数でシードオブジェクトを作成するには、同じ効果を持つ2つの方法があります。しかし、種子の乱数はあまり役に立たないようです。
4。ランダムの関数は、math.random()の関数をカバーしています。
5.乱数を使用して、ランダム文字列などの複雑なランダムデータを実装できます。
6.繰り返さない乱数を研究しないでください、それはあまり意味がありません。
補足コード:
コードコピーは次のとおりです。
パッケージcom.test;
java.util.randomをインポートします。
パブリッククラスのrandomutils {
public static final string allchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static final string retterchar = "abcdefghijkllmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
public static final string numberChar = "0123456789";
/**
*固定長のランダム文字列を返します(上限と小文字と数字のみを含む)
* @param長ランダム文字列長
* @returnランダム文字列
*/
public static string generatestring(int length)
{
stringbuffer sb = new StringBuffer();
RANDOM RANDOM = new Random();
for(int i = 0; i <length; i ++){
sb.append(allchar.charat(random.nextint(allchar.length())));
}
return sb.tostring();
}
/**
*固定された長さのランダムな純粋な文字列(上限および小文字のみを含む)を返します
* @param長ランダム文字列長
* @returnランダム文字列
*/
public static string generatemixString(int length)
{
stringbuffer sb = new StringBuffer();
RANDOM RANDOM = new Random();
for(int i = 0; i <length; i ++)
{
sb.append(allchar.charat(random.nextint(letterchar.length())));
}
return sb.tostring();
}
/**
*固定された長さのランダムな純粋な大文字の文字列を返します(大文字のみを含む)
*
* @param長ランダム文字列長
* @returnランダム文字列
*/
public static string generateLowerString(int length){
return generatemixstring(length).tolowercase();
}
/**
*固定長のランダムな小文字の文字列を返します(大文字と小文字のみを含む)
*
* @param長ランダム文字列長
* @returnランダム文字列
*/
public static string generateupperstring(int length){
return generatemixstring(length).touppercase();
}
/**
*固定長の純粋な0文字列を生成します
*
* @Param Length Stringの長さ
* @return pure 0文字列
*/
public static string generatezerostring(int length){
stringbuffer sb = new StringBuffer();
for(int i = 0; i <length; i ++){
sb.append( '0');
}
return sb.tostring();
}
/**
*数値に基づいて固定長の文字列を生成すると、長さは前の文字列に追加されません。
*
* @param num番号
* @param fixdlenth文字列長
* @return固定長さの文字列
*/
public static string tofixdlengthstring(long num、int fixdlenth){
stringbuffer sb = new StringBuffer();
string strnum = string.valueof(num);
if(fixdlenth -strnum.length()> = 0){
sb.append(generatezerostring(fixdlenth -strnum.length()));
} それ以外 {
新しいruntimeexception( "convert" + num + "を長さの" + fixdlenth + "例外が発生します!");
}
sb.append(strnum);
return sb.tostring();
}
/**
*数値に基づいて固定長の文字列を生成すると、長さは前の文字列に追加されません。
*
* @param num番号
* @param fixdlenth文字列長
* @return固定長さの文字列
*/
public static string tofixdlengthstring(int num、int fixdlenth){
stringbuffer sb = new StringBuffer();
string strnum = string.valueof(num);
if(fixdlenth -strnum.length()> = 0){
sb.append(generatezerostring(fixdlenth -strnum.length()));
} それ以外 {
新しいruntimeexception( "convert" + num + "を長さの" + fixdlenth + "例外が発生します!");
}
sb.append(strnum);
return sb.tostring();
}
/**
*毎回生成されるレンディジットの数は異なります
* @param param
* @return固定長の数
*/
public static int getNotsimple(int [] param、int len)
{
ランダムrand = new Random();
for(int i = param.length; i> 1; i--)
{
int index = rand.nextint(i);
int tmp = param [index];
param [index] = param [i -1];
param [i -1] = tmp;
}
int result = 0;
for(int i = 0; i <len; i ++)
{
結果= result * 10 + param [i];
}
返品結果;
}
public static void main(string [] args){
system.out.println(generatestring(10));
system.out.println(generatemixstring(10));
System.out.println(generateLowerString(10));
system.out.println(generateupperstring(10));
system.out.println(generatezerostring(10));
System.out.println(tofixdlengthstring(123、10));
System.out.println(tofixdLengthString(123L、10));
int [] in = {1,2,3,4,5,6,7};
System.out.println(getNotsimple(in、3));
}
}