static nextID
フィールドを増やすことなく、クラス内の各オブジェクトに新しい一意識別子を生成しようとしています。これを使用すると、プログラムをアンロードしたりアンロードしたりするときに問題が発生します。一意のオブジェクトIDを生成
私は静的メソッドでオブジェクトをループするソリューションを考え出しましたが、私には何らかの未知の理由があってもwhileループを終了しません。
ideone.comでテストしていますhere 5つのオブジェクトを作成しようとしましたが、作成することはありません。
テストコード全体を表示するリンクに移動することなく、私が使用している方法は次のとおりです。
public static int newRandomID() {
int randomID = 0;
boolean notUnique = true;
while (notUnique) {
randomID = (int) (Math.random() * 999999 + 1);
for (Example e : examples) {
if (e.ID == randomID) {
notUnique = true;
break;
}
notUnique = false;
}
}
return randomID;
}
私は見えないほど愚かなミスを犯したのですか、これがうまくいかない理由はありますか?
一般的なポインタのカップル:1)必要以上に複雑な名前にしないでください。 'notUnique'を単に' unique'に変更し、 'not unique'を' not unique'としてください。 2) 'java.util.Random'を使用して、上限を持つ整数を生成します。 3)封じ込め論理を別の方法で入れる。あなたの間違いは明らかで、あなたのプログラムは 'while(idExisists(randomID))randomID = rnd.nextInt(99999);'と表現することができます。 – aioobe