文字または数字を入力して、ランダムな出力(文字または数字)を生成します。同じ出力に対しても出力は常に同じでなければなりません。誰かがこの特定の範囲でこのランダムな出力をどのように生成できるか教えてください。ランダムな文字を生成する
答えて
まず最初に、整数の場合と同等の文字列入力のケースを作成します。私が考えることができる最も簡単な方法は、str.hashCode()
Javaのすべてのオブジェクトがこのメソッドを定義しており、あらゆる種類の入力から。
ここで、与えられた整数のシードに基づいてランダムな文字列を生成しなければならないと仮定しましょう。あなたはそれを行うことができます:
public String generateString(int seed) {
Random rnd = new Random(12);
int len = 10 + rnd.nextInt() % 20; // achieving random string length in [10, 30)
StringBuilder sb = new StringBuilder(); // here we will build the string
for (int i = 0; i < len; i++) {
sb.append(32 + (char) rnd.nextInt() % 94); // displayable ASCIs are between 32 and 127
}
return sb.toString();
}
しかし、同じ入力に対して同じ出力を生成しますか? "これはテストです"という文字列を入力し、この文字列のすべての文字を取り、ランダムなアルファベットを生成し、同じ入力に対して異なる出力を生成します...ランダムに65 + rand.nextInt((int)c)%24を使用しました世代。例えば、 – waqas
。 "これはテストです"とは、すべての私とsのために同じ文字を生成するはずですが、そうではありません。私は何を間違えているのですか?テストのために、私はrand.setseed(2)によって種を2に設定しました。 – waqas
多分私はあなたの仕事を誤解しました。私は、入力文字列全体を取ると、同じランダム文字列が生成されるたびに入力文字列全体を取得すると思っていました。現在のコードでは、入力文字列と比べて長さの異なるランダムな文字列を生成することさえできます。 –
ランダムな出力のポイントは「ランダム性」です。同じ入力に対して同じ出力を生成するメソッドを使用する場合は、ランダムではありません。
- >(ここで行う) - >出力 ここで入力 'i'は出力 'o'が固定されています のように入力すると1常に出力を繰り返さないようにするには、常に247(または他の数値)を得る 出力を繰り返さないようにするには、数式(たとえばsin(x)* 73)/ 43またはtan(x)あなたの入力ですが、これは任意の与えられた数に対して常に固定される任意の入力に対して、一見無関係の出力を生成します。
私はあなたがあなたのキャラクターのためにこれをしたいと述べたコメントを参照してください、このaproachは同じ場所(char)(32 +((tan((int)x)* 53)/42))%26)) – angryInsomniac
あなたが正しいと理解していれば、多分これはあなたがやりたいことです。
import java.util.Random;
class t
{
public static void main(String[] args)
{
Random rand = new Random(100);
char[] alpha = new char[26]; //to store alpahbets
int[] rlist = new int[26]; //to store random numbers
for (int j = 0; j<26; j++)
{
alpha[j] = (char)(j+97);
rlist[j] = rand.nextInt(10);
System.out.println(rlist[j]);
}
//input
char input = 'a';
//output
int loc = (int)input-97;
System.out.println(alpha[rlist[loc]]);
}
}
ハッシュテーブルを使用できます。
出力は同じ入力に対しても常に同じにする必要があります。無作為の使用は何ですか? – Jayan
例は有用かもしれません –
@ジャヤン、多分彼はランダムな関連を意味します。 – John