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

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と関連する良く見られている質問

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【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ランダムで月を生成し、その月を英語で入力する

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リンク画像をランダム表示して一定時間でランダムにリンク画像切り替えするには?

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

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] = ...続きを読む

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ランキング

おすすめ情報