
『a~z』の英小文字をランダムで表示させ、さらにint型変数countを『0~9』までランダムに発生させて取得した数だけ『a~z』をランダムに表示させたいのですが、表示結果が(例)aaaaa・・・ となってしまいます。本当は、acyxd・・・とランダムに表示させたいのですがどうすれば、よいでしょうか?
import java.util.*;
import java.io.*;
class CharCheck{
public char charRandom(){
int n;
char c = ' ';
Random ran = new Random();
while(true){
n = ran.nextInt(123);
if(n >= 97 && n <= 122){
c = (char)n;
break;
}
}
return c;
}
public class RandomTest extends CharCheck{
public static void main(String args[]){
char ch[] = new char[10];
int count = 0;
CharCheck ChChk = new CharCheck();
Random ran = new Random();
komoji = ran.nextInt(9);//英小文字をいくつ表示するかランダムで決める? (1以上とする)
if(count == 0){
count++;
}
for(int i=0; i<count; i++){
ch[i] = ChChk.charRandom();
System.out.println(ch[i]);
}
}
}
No.1ベストアンサー
- 回答日時:
メソッドcharRandom()を見ると、起動ごとにいちいち
Rondom()を生成しています。
Rondom()が作る乱数は「現在の時刻にあれこれ加工して、
一見ランダムに見える数値を計算していく」ようになっています。
一つのRondom型のオブジェクトでnextInt()を使うのなら、
そのたび別の数値が得られるのですが、
いちいち生成すると、このような計算をする位の短い間では、同じ数値をかえしてきます。
対処法としては、Rondom型のオブジェクトranを、
どっちかのクラスのフィールドとして初期化し、
(つまり、メソッドの外側で
Rondom ran = new Rondom();
と宣言しておく)
同じranをmainやcharRondomで使い回しをすればいいのです。
なお、mainの中でCharCheckオブジェクトを生成する必要はないと思います。
(さもなければ、CharCkeckを継承する必要はないと思います。
どちらかが不必要ではないでしょうか)
No.2
- 回答日時:
問題点は #1 さんが回答されているので、簡単なロジックを。
Random random = new Random(); //これを使いまわす
int count = random.nextInt(10) + 1 ; //カウンタ変数 1-10
char[] c = new char[count]; //出力用文字配列
for(int i=0 ; i<count ; i++ ){
c[i] = (char)(random.nextInt('z'-'a'+1) + 'a');
}
System.out.println(c);
上記の 'z'-'a'+1 は、アルファベット総数の26としても構わないのですが、何をしようとしているのかを明示的にする為にこうしました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Ruby vscode 文字化け 1 2022/05/21 19:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
式の型は配列型で int に解決済...
-
DataSet(DataTable)の使い方
-
メインが含まれていません
-
java spring でエラーが出て困...
-
Threadに関するの質問
-
JAVAでホーナー法
-
6枚の画像をランダムに表示させ...
-
javaでカレンダー作成
-
コード中の謎のエラー
-
6桁の数字を重複なしでランダム...
-
乱数の起こし方。
-
Java2Dを利用した、鉄格子の画...
-
C言語のポインターに関する警告
-
System.err. printlnとSystem.o...
-
ループ処理の際、最後だけ","を...
-
動的配列が存在(要素が有る)か...
-
Java int sum = 0は必要ですか?
-
VBAで配列の計算
-
ORA-01858: 数値を指定する箇所...
-
java キーボード入力された値の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
メインが含まれていません
-
式の型は配列型で int に解決済...
-
Java 初心者 int型の取り扱い方
-
(Swing)JTextFieldを半角のみ入...
-
DataSet(DataTable)の使い方
-
javaでカレンダー作成
-
intが負の時に投げる例外はあり...
-
C#で実行時にメソッドの返り値...
-
JUnit4のアノテーションについて
-
6桁の数字を重複なしでランダム...
-
JAVA エラー 式の開始が不正で...
-
java spring でエラーが出て困...
-
C#でバブルソート
-
プログラムの作り方
-
全組み合わせの出力
-
SwingでJtableのヘッダ行が表示...
-
アンマネージDLLで、ダイアログ...
-
c# デリゲート関連の命名について
-
複数のボタンを配置し、それぞ...
おすすめ情報