
No.4ベストアンサー
- 回答日時:
もう既に登録してあるのであれば、
ランダムに数字を取得する関数と、
数字が取得してあるか確認する関数を用意して、
両方の関数を必ず通るようにしてから登録という流れでいいのでは?
ランダム数値取得関数()
数字取得してあるか関数(取得したランダム数値)
の流れで、数字が登録済みチェック関数の戻り値をbooleanなどにして、
booleanの結果で上記をループし続けるでいけると思いますが。
例を挙げるとしたら、
boolean loopFlg = true;
int randNum;
while( loopFlg) {
randNum = randomNumberCreate();
loopFlg = checkNumberRegistered(randNum); ←登録されてなかったらfalseを返す
}
こんなんでいけると思いますよ。
関数の実装はご自分で・・・
分かりやすいご説明ありがとうございます。
なるほど、BOOLEANを使うというのは思いつきませんでした。
というより、この関数の使い方が良く分かっていなかったのですが。
ありがとうございました。
(備考)
下記のようにも組んでみても上手くいきました。
int newNo = 0;
newNo = (int)(Math.random() * 999999 + 100000);
StringBuffer bufSql = new StringBuffer();
bufSql.append("SELECT");
bufSql.append(" fid "); //お客様ID取得
bufSql.append("FROM tbl_customer ");
ResultSet rs1=statement.executeQuery(bufSql.toString());
while( rs1.next())
{
int Fid = rs1.getInt("fid");
if (Fid == newNo)
{
newNo = (int)(Math.random() * 999999 + 100000);
}
}
No.5
- 回答日時:
では、少しちがったアプローチを
下準備
(1)100000~999999を配列に順番に用意
(2) (1)の配列をシャッフル
(3) (2)をファイルに書き出す
使用方法
新しい登録要求があったら↑(3)のファイルの先頭6文字を取り出す。ファイルはその分削ったものにする(終りからの方が削りやすいか?)
課題
同時にファイルにアクセスしないようにする
ファイルが外ら見えないように隠す
SQLなら、↑(3)を未使用ID用データベースにして、先頭レコードからIDを取り出して削除、でもいいかも
No.3
- 回答日時:
補足回答を読み、失礼ながら苦笑してしまいました。
すでに、取得した乱数を保存しているじゃないですかー!
ようは、テーブルに保存しているときに、主キーが重複していたら、キー(乱数)を取得しなおせばいいんですよ。
この回答への補足
補足回答ありがとうございます。
お恥ずかしい話で申しわけありません。
まだ勉強始めたばかり(4ヶ月程度)なので、どうも思いつきません。
その本題の主キーが重複していた時に乱数を取得し直す方法をWhile文とIF文等を使ってやってみようとしているのですが、どうやったらいいもんでしょうか?
初歩的な質問で申しわけありません。宜しくお願いします。
No.2
- 回答日時:
配列にすでに出てきた数字を残して チェックすれば よいのでは ないでしょうか?
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
new Main() .start();
}
private void start() {
int newNo = 0;
for(int i =0;i<100;i++){
newNo = (int)(Math.random() * 999999 + 100000);
if(chkNum(newNo)){
System.out.println(newNo);//処理
}
}
}
ArrayList<Integer> chk = new ArrayList<Integer>();
boolean chkNum(int num){
for(int i = 0;i<chk.size();i++){
if(chk.get(i).intValue()==num)return false;
}
chk.add(num);
return true;
}
}
この回答への補足
早々のご返事ありがとうございます。
なるほど。出てきた数値を記憶させておくという手もありますね。
ただ説明不足だったので申しわけありません。
今作成しているのは貸付金管理システム(アコムのHPのようなもの)で、お客様が新規登録でランダムの6桁の数値をIDとしてMYSQLに登録。次回以降のお客様が同じ数値をランダムで取得しないようなプログラムにしたいと思っております。
そこを防ぐ為にIF文やWhile文も考えたのですが、どうしても思いつきません。ご教授頂けたら幸いです。宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
行の途中から読み込む方法
-
JAVA EOFの検出 (条件文で「...
-
JAVA エラー 式の開始が不正で...
-
C#で実行時にメソッドの返り値...
-
Javaについて
-
(Swing)JTextFieldを半角のみ入...
-
初心者ですが、今javaで簡単な...
-
オブジェクトの中のプロパティ...
-
Log4jで機能毎に別ファイルへ出...
-
JSPやサーブレットでSystem.out...
-
動的配列が存在(要素が有る)か...
-
IF関数でEmpty値を設定する方法。
-
ORA-01858: 数値を指定する箇所...
-
ループ処理の際、最後だけ","を...
-
System.err. printlnとSystem.o...
-
変数を動的に作るには?
-
VB.net 引数で配列変数を渡す際...
-
javaでの文字列からの数字抽出
-
コンテンツダウンロード時のプ...
-
配列にnullを代入すると、null...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
メインが含まれていません
-
式の型は配列型で int に解決済...
-
javaでカレンダー作成
-
DataSet(DataTable)の使い方
-
Java 初心者 int型の取り扱い方
-
java初心者の質問(3つの整数の...
-
javaでcsvファイル読込時の改行...
-
Java 日付の加算がうまくいき...
-
JAVA エラー 式の開始が不正で...
-
6桁の数字を重複なしでランダム...
-
コンパイルできません
-
SwingでJtableのヘッダ行が表示...
-
C#で実行時にメソッドの返り値...
-
intが負の時に投げる例外はあり...
-
意味がわかりません
-
コンパイラが注意してくる
-
複数のボタンを配置し、それぞ...
-
Threadに関するの質問
-
C#でバブルソート
おすすめ情報