こんばんは。
はじめまして。

JAVAでランダムの文字列を生成する時に何か便利な機能はあるのでしょうか?
CGIでは確かあったはずなんですが、
自分なりに探してみたのですがわかりませんでした。

今の自分の考えでは、ランダムで数字は生成できるので
それをChar型を使って文字コードで一文字取得して、それを連結するのかな?
なんて考えています。

もっといい方法があればできればご教授ください。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

私も乱数を生成してから文字列に置き換えるくらいしか思いつきません。


望んだ回答ではないかもしれませんが
Javaのjava.langパッケージを拡張するライブラリであるcommons-langを
使用すれば比較的容易に生成できそうです。
参考のURLを載せておきます。

参考URL:http://d.hatena.ne.jp/GARAPON/20090224/1235460950
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q ランダムはどのような意味で使われていますか?

 ランダムはどのような意味で使われていますか?
 普通ランダムという言葉は"無作為""無造作"などという意味で使われています。
 しかし情報系の分野で"ランダムアクセス"という言葉があるのですが、そこでは逆にランダムが"任意の"という意味で、ランダムアクセスは”任意の記憶領域への直接アクセス”を意味を表します。
 そこで質問です。実際のところランダムというのは英語圏でどのような意味で使われているのでしょう?日本で言うところの”適当”という言葉と同じニュアンスで使われているのでしょうか?
よろしくお願いします。

Aベストアンサー

ランダムは確かに「無造作」とか「盲滅法」です。そして、情報系のランダムアクセスと言うのも実は同じ意味から来ています。コンピュータの歴史を考えると、ランダムアクセスと言う言葉に対する違和感がなくなると思います。

パンチカードとか磁気テープなどはシーケンシャル(sequential = 連続して続いて起こる)の記憶媒体です。情報の頭から読み出して、順番に情報を読みながら、目指す情報に辿り着きます。当然時間が掛かりますね。

その後登場したRAMとかハードディスクなどはランダムアクセス系の記憶媒体です。頭から順番に情報を読み出す必要なく、探しているデータがある所に飛んで行き、読み出し/書き込みする事が出来ます。それまでシーケンシャルの記憶媒体を使って順番に情報を読んでいた人達には、ランダムアクセス系の媒体は「無造作/盲滅法」なのがお分かり頂けますか。勿論コンピュータですので、本当に盲滅法に媒体を読みあさっているのではなく、情報がどこにあるか計算して、任意の場所にアクセスしています。しかし、いくつものデータを次々と読み出したり、書き込んだりさせると、見た目(想像力を使って下さい)がハチャメチャに、盲滅法に、適当にアクセスしているようだからランダムアクセスなのです。

英国圏の「ランダム」の使われ方は、恐らく質問者さんのお考え通りですよ。適当、無造作、盲滅法などです。

ランダムは確かに「無造作」とか「盲滅法」です。そして、情報系のランダムアクセスと言うのも実は同じ意味から来ています。コンピュータの歴史を考えると、ランダムアクセスと言う言葉に対する違和感がなくなると思います。

パンチカードとか磁気テープなどはシーケンシャル(sequential = 連続して続いて起こる)の記憶媒体です。情報の頭から読み出して、順番に情報を読みながら、目指す情報に辿り着きます。当然時間が掛かりますね。

その後登場したRAMとかハードディスクなどはランダムアクセス系の記憶媒...続きを読む

QListオブジェクトを連結し、新しいListオブジェクト生成

2つのListオブジェクトを連結して、
新たに1つのListオブジェクトを生成するのは、
どうすればいいのでしょうか?

1. ListオブジェクトA
2. ListオブジェクトB
3. ListオブジェクトC(1.と2,を連結して新規生成)

※1と2には全く変更を加えない。

また、この方法は、パフォーマンスが重くなるでしょうか?

Aベストアンサー

連結というか、CにAとBの要素をすべて入れればいいわけですね。

List listC = new ArrayList();//LinkedListでもよい
listC.addAll(listA);
listC.addAll(listB);

でできると思います。

Q頻出関数とその意味をランダムで一行表示するphpスクリプトはありませんか。

頻出関数とその意味をランダムで一行表示するphpスクリプトはありませんか。
自分で作れと言われればそれまでなのですが、すでにあればと思いまして。

Aベストアンサー

array_rand

Q【Javascript】HTML ランダム生成

文字列をランダムで生成するJavascriptを作成したのですが、生成した文字列の取得方法が解りません。
構文は画像の通りです。
出来ればHTMLで取得したいです。

Aベストアンサー

う~~んと・・・

>生成した文字列の取得方法が解りません。
ご提示の関数を必要に応じて呼び出して利用したいけれど、方法がわからないという意味でしょうか?

関数内で生成された文字列は、最終的に変数rにありますので、関数側では
 return r;
としておいて・・・

呼び出し側で、
 var str = AutoV();
などとすることで、生成した文字列を変数strに格納できます。

関数を実行した戻り値が結果ですので、変数で受ける必要もなく、式の中などで直接利用することも可能です。
 if( AutoV() > "Z" ) { ~~


・・・と、ここまで書いてから再度よくよく見てみると、画像に示されているコードの方では
 window.onload = function AutoV() { ~~
となっているようですね?
その場合は、ロード時に実行されるだけとなるので、ANo2様が回答なさっているように、その関数の中で処理を終わらせるのがよろしいかと。
(生成した文字列は変数rにある)

※ 前半の回答は、補足に示されている方のコードに対する回答です。
 ご質問の内容と意味が違っていたらスルーしてください。

う~~んと・・・

>生成した文字列の取得方法が解りません。
ご提示の関数を必要に応じて呼び出して利用したいけれど、方法がわからないという意味でしょうか?

関数内で生成された文字列は、最終的に変数rにありますので、関数側では
 return r;
としておいて・・・

呼び出し側で、
 var str = AutoV();
などとすることで、生成した文字列を変数strに格納できます。

関数を実行した戻り値が結果ですので、変数で受ける必要もなく、式の中などで直接利用することも可能です。
 if( AutoV() > "Z" ) { ~...続きを読む

Qランダムに並んでるキーボードのキーの配列、何か意味が?

思うのですが、キーボードってよく見ると適当に並んでるように思うのは自分だけでしょうか?
キーボードのキーそれぞれの配列って、どうしてこうなんでしょうか?ふと気になります。例えば、Qの隣がW・E・R・・と続いてますよね?
何か意味があってこの配列になってるのでしょうか?知ってる方、教えてください。

Aベストアンサー

過去ログにそのあたりの詳しい回答がありました・
http://oshiete1.goo.ne.jp/kotaeru.php3?q=42845

確かに#1のlinus3030さんの説が有力なのですが、別の説も唱えられているようですね。
http://contest.thinkquest.gr.jp/tqj1999/20204/ja/history/extra1.html
このURLも詳しいです。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=42845

Qランダムで月を生成し、その月を英語で入力する

import java.util.Scanner;
import java.util.Random;

class test8{
public static void main(String[] args){
Scanner stdIn=new Scanner(System.in);
Random rand =new Random();

String[] s1={"January","February","March","April","May","June","July","August","September","October","November","December"};


System.out.println("英語の月名を入力してください。\nなお、先頭は大文字で、2文字目以降は小文字とします。");

int n,t;
do{
n=rand.nextInt(12); //nは0~11の乱数
boolean y=false;

while(y==false){
System.out.print(n+1+"月:");
String s2=stdIn.next();

if(s1[n].equals(s2)){
y=true;
}else{
System.out.println("違います。");
}
}
System.out.print("正解です。もう一度? 1…Yes, 2…No:");
t=stdIn.nextInt();
}while(t==1);
System.out.println("終了です。");
}
}


これは正しいプログラムなのですが、
String s2=stdIn.next();
の next() の部分を nextLine() に変えると、

[実行例]
英語の月日を入力してください。
なお、先頭は大文字で、2文字目以降は小文字とします。
11月:November
正解です。もう一度? 1…Yes, 2…No:
1
2月:違います
2月:

という風に、なぜか
2月:違います
という一文が無駄に表示されてしまいます。
なぜなんでしょうか。。

import java.util.Scanner;
import java.util.Random;

class test8{
public static void main(String[] args){
Scanner stdIn=new Scanner(System.in);
Random rand =new Random();

String[] s1={"January","February","March","April","May","June","July","August","September","October","November","December"};


System.out.println("英語の月名を入力してください。\nなお、先頭は大文字で、2文字目以降は小文字とします。");

int n,t;
do{
n=rand.nextInt(12); //nは0~11の乱数
boolean y=false;...続きを読む

Aベストアンサー

nextLine は行末の [ENTER] までを返すのですが, この「行末の [ENTER]」そのものも読み込んでいます. しかし, それ自体は不要なので捨てている, ということです.

nextLine が「行末の [ENTER]」を読み捨てることにしないと, 無限ループになっちゃいますよね.

Q人の性格を表す時に使うrandomの意味

映画女優のインタビューやYoutubeのコメント欄でよく

I'm random や He's so random

などのような人の性格を表すような使われ方をしているのをたまに見かけます。
ネイティブの方にとってはどのような意味で使われているのでしょうか?

実際の例文として
インタビュアーからある女優に対して「自分自身をどのように捉えているか(どのように思うか)」という質問に対して
I'm complete nerd. And I just think I'm ridiculously random.
I was on video chat with my best friend yesterday, and I just broke out in a song about ramen noodles......続く

前後の文脈が分かるように多少余分な文章も書きました。

よろしくお願いします。

Aベストアンサー

辞書で調べてみました。

リーダーズプラス
random - a.
[ハッカー]  予測できない、いろいろな、ろくなことをしない、とりとめのない、雑然とした、さして理由のない、わけもなくよくない

ランダムハウス英和大辞典
[米ハッカー俗] 順番のない、変則的な、まとまりのない
[米俗] 浅はかな、不真面目な、非生産的な、理由(いわれ)のない、つまらない
[米学生俗] 変な、変った、普通でない
(以上は形容詞の項目)

とあります。文脈がないので、どの訳語を選べばいいかわかりませんが、こういった俗語の意味だと思います。

Qリンク画像をランダム表示して一定時間でランダムにリンク画像切り替えするには?

「複数のリンク画像を一定時間で(各リンク先も)切り替えるには?」で画像表示を一定時間で切り替えることがわかりましたが、ページを開いたときにリンク画像がランダムで表示されその後、一定時間でランダムにリンク画像を切り替えをする場合、どうすればいいのでしょうか?よろしくお願いします。

Aベストアンサー

そうでした^^;大切な部分が抜けてましたね。

<!-- これを画像を張りたい位置に挿入。<body>~</body>内 -->
<script type="text/javascript">
/* 設定部分 */
var interval = 2000; //切り替わる時間(1000=1秒)
var imgs = new Array(); var hrefs = new Array();
imgs[0] = new Image(); imgs[0].src = "a001ani.gif"; hrefs[0] = "リンク先1";
imgs[1] = new Image(); imgs[1].src = "a002ani.gif"; hrefs[1] = "リンク先2";
imgs[2] = new Image(); imgs[2].src = "a003ani.gif"; hrefs[2] = "リンク先3";

/* プログラム部分 */
var num = Math.floor(Math.random()*imgs.length);
document.write('<a href="'+hrefs[num]+'" id="cth"><img src="'+imgs[num].src+'" id="cti" style="border:0" /></a>');
var cti = document.getElementById("cti"); var cth = document.getElementById("cth");
setInterval(function(){
num += Math.floor(Math.random()*(imgs.length-1))+1;
if(num>=imgs.length) num -= imgs.length;
cti.src = imgs[num].src; cth.href = hrefs[num];
},interval);
</script>
<!-- ここまで -->

そうでした^^;大切な部分が抜けてましたね。

<!-- これを画像を張りたい位置に挿入。<body>~</body>内 -->
<script type="text/javascript">
/* 設定部分 */
var interval = 2000; //切り替わる時間(1000=1秒)
var imgs = new Array(); var hrefs = new Array();
imgs[0] = new Image(); imgs[0].src = "a001ani.gif"; hrefs[0] = "リンク先1";
imgs[1] = new Image(); imgs[1].src = "a002ani.gif"; hrefs[1] = "リンク先2";
imgs[2] = new Image(); imgs[2].src = "a003ani.gif"; hrefs[2] = ...続きを読む

Q[C#]2つのランダム文字列を作りたい

いつもありがとうございます。

2種類のランダム文字列を作りたいのですが、
なぜか同じ文字列が作成されるという現象が起こります。

以下の関数を用意して
public static string ランダム(int 桁数)
{
string[] codelist = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };

Random Random = new System.Random();

for (int i = 0; i < 桁数; i++)
{
randomcode += codelist[Random.Next(0, 36)];
}

return randomcode;

}

textBox1.Text = ランダム(10);
textBox2.Text = ランダム(10);

とやっても、同じランダムの文字列が入ってしまいます。

間に、
Thread.Sleep(100);

とか入れると変わるのですが・・・
理由がわかりません。

初心者的質問ですみませんがよろしくお願いします。

いつもありがとうございます。

2種類のランダム文字列を作りたいのですが、
なぜか同じ文字列が作成されるという現象が起こります。

以下の関数を用意して
public static string ランダム(int 桁数)
{
string[] codelist = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };

Random Random = new System.Random();
...続きを読む

Aベストアンサー

コンピュータで使われている乱数は、実際には「疑似乱数」と言って、一見バラバラで乱数と言ってもいい性質を持っていますが、実際には計算によって求められたものです。

それまでの値に、なんらかの計算をした結果を、「次の乱数」として使います。(Nextというメソッド名もそこに由来)
このとき、一番最初の状態になるものを「種(シード,seed)」と言います。
「前の状態から新しい乱数を計算する」ということから「種が同じなら、乱数列も同じになる」という性質があります。

バラバラにするための常套手段として、種に現在時刻から求めた値を使うことで、実行時刻が変化すれば値が変わるようにする、というのがあります。ただ、無限に細かい時刻をそのままコンピュータでは扱えないので、適当な単位(例えば、秒単位)になってしまい、単位時間以内(例えば、秒単位なら1秒以内)なら、同じ乱数列になってしまう、という問題があります。

Random.Random()のマニュアルを読むと
http://msdn.microsoft.com/ja-jp/library/h343ddh9%28v=vs.95%29.aspx
「既定のシード値はシステム時計から取得されるため、その分解能は有限です。 その結果、既定のコンストラクターを呼び出すことによって連続で作成される、異なる Random オブジェクトの既定のシード値は同一であるため、同一の乱数セットが生成されます。」
と、明記されています。

public static string ランダム(int 桁数) を2回呼び出していますが、その度に、Random Random = new System.Random();で新しい System.Randomオブジェクトを生成しています。
間にいくつかの処理が入っているとは言え、非常に短時間で終わるものなので、この「連続で作成される、異なる Random オブジェクト」となっている、と考えてよいでしょう。

対処法は、マニュアルにも書いてあります

コンピュータで使われている乱数は、実際には「疑似乱数」と言って、一見バラバラで乱数と言ってもいい性質を持っていますが、実際には計算によって求められたものです。

それまでの値に、なんらかの計算をした結果を、「次の乱数」として使います。(Nextというメソッド名もそこに由来)
このとき、一番最初の状態になるものを「種(シード,seed)」と言います。
「前の状態から新しい乱数を計算する」ということから「種が同じなら、乱数列も同じになる」という性質があります。

バラバラにするための常套手段とし...続きを読む

QJavaのString、StringBuffer、Charの中でメモリ

JavaのString、StringBuffer、Charの中でメモリの使用が一番良いものは?
Java初心者です。
現在JavaMEのMIDP(2.0)で辞書アプリケーションを作成しています。
携帯電話のメモリが小さいことから不向きではあると思っていますが、できるだけ多くの単語と説明を登録していようとしています。
基本的な文法は通常のJavaと同じだと思います。

大まかな構造は不要部分を省きますと、
-----
class Dictionary extend Canvas(){
 int i,j,start=0,end=0,x=1;
 private static Font fontL=Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_PLAIN,Font.SIZE_LARGE);

 void paint(Graphics g){
  //getsetsumei(x)で単語の意味・説明をString型で受け取っています。
  //substringで一文字ずつ増やしながら文字の横幅をgetWidthで受け取り、
  //描画画面横幅の最大値240を越えないように部分文字列で表示しています。
  //文字の続きは文字サイズの縦幅をfontL.getHeight()で取得し、
  //改行のような形で続けて表示します。
  //また描画画面縦幅の最大領域getHeight()を越えて表示しないために
  //i行目までに描画した文字列の縦幅の総和がこれを越えないようにすることで、
  //無駄な描画をしないようにしています。

  for(i=1;i!=0 && i*fontL.getHeight()<getHeight()-130;i++){//画面縦幅の描画範囲の判定
   while(fontL.stringWidth(getsetsumei(x).substring(start,end+1))<240){//画面横幅の描画範囲の判定
    end++;//横幅に達するまで文字数を増やす
    if(end==getsetsumei(x).length()){//表示すべき文字列の取得が終わった
     g.drawSubstring(getsetsumei(x),start,end-start,0,130+x,Graphics.TOP|Graphics.LEFT);
     i=-1;//終了条件のi!=0を満たさなくするため
     break;
    }
   }
   //描画すべき文字列の一部をSubstringで描画
   g.drawSubstring(getsetsumei(x),start,end-start,0,130+y,Graphics.TOP|Graphics.LEFT);
   start=end;//次の行の描画すべき部分文字列の開始位置を指定
   y+=fontL.getHeight()+1;//改行のためのy座標の移動
  }
 }

 String getsetsumei(int DicNum){
  switch(DicNum){
  case 0:return " ";//説明無し
  case 1:return "辞典,辞書,字引";//Dictionaryの意味、説明
  }
 }
}
-----
となっています。
実際は単語の意味をString型で返すgetsetsumeiの引数xの値を変化させて単語に合わせて意味を取得しようとしています。
改行するプログラムのためにgetsetsumei関数は何度も呼ばれることになるので、できるだけメモリを使用せず、高速にしたいと思っています。
色々調べたところStringは非可変文字列であるとのことでした。
これは説明内容が変更されるたびに別のメモリを確保するということでしょうか?
それとも同じメモリに新しい説明が上書きされるのでしょうか?その場合、StringではなくStringBufferを使用すべき、もしくはchar配列を使用すべきでしょうか?
どなたかご教授願います。

JavaのString、StringBuffer、Charの中でメモリの使用が一番良いものは?
Java初心者です。
現在JavaMEのMIDP(2.0)で辞書アプリケーションを作成しています。
携帯電話のメモリが小さいことから不向きではあると思っていますが、できるだけ多くの単語と説明を登録していようとしています。
基本的な文法は通常のJavaと同じだと思います。

大まかな構造は不要部分を省きますと、
-----
class Dictionary extend Canvas(){
 int i,j,start=0,end=0,x=1;
 private static Font fontL=Font.getFont(Font.FACE_MONOS...続きを読む

Aベストアンサー

「String型のオブジェクトが不変」ということの意味を勘違いされていると思います。オブジェクトの中身とオブジェクトへの参照を区別してください。不変なのはオブジェクトの中身のほう。
下記のようなコードで変数setsumeiはString型オブジェクトへの参照を保持しているだけなので、実行しても変数setsumeiが保存されているメモリが毎回確保されるなどということはなく、同じ場所が上書きされます。

String setsumei;
setsumei=getSetsumei(1);
setsumei=getSetsumei(2);
setsumei=getSetsumei(3);


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング