私は文字列の配列を持っています。ユーザーが自分のアプリケーション内のボタンをタップすると、乱数を生成し、それを使ってfacts []配列からランダムなStringを選択します。しかし、私は自分のコードを改良して、同じ乱数が "決して"発生しないようにしました(同じ文字列がユーザに表示されるようになりました)。私の努力にもかかわらず、私の「チェック」ブロックは、最初にボタンをクリックして何もしないときにランダムな事実を生成するので、動作しないようです。この背後にある正しいロジックを理解し、より効率的なコードブロックを書くのを助けてください。乱数発生チェック
私の現在のロジック:生成された乱数がint [] factsCheck配列にすでに存在するかどうかをチェックし、別のものを作成するかどうかを確認します。プログラムに認識されるように配列に追加しない場合一度作成されています。 getFactsの初めに
int[] factsCheck = new int[facts.length];
boolean isNotNewRandomNumber = true;
int count = 0;
int randomNumberToReturn;
private void initFactsCheck() {
for(int i=0; i<=factsCheck.length;i++) {
factsCheck[i] = -1;
}
}
String getFact() {
// Randomly select a fact
Random randomGenerator = new Random();
while(isNotNewRandomNumber) {
randomNumberToReturn = randomGenerator.nextInt(facts.length);
for(int i = 0; i<factsCheck.length; i++) {
if(factsCheck[i] == randomNumberToReturn) {
break;
} else {
count++;
}
}
if (count == factsCheck.length) {
// Doesn't exist
isNotNewRandomNumber = false;
}
count = 0;
}
return facts[randomNumberToReturn];
}
一般的なメモとデザインの改善と同様に、必要な重複のないランダムロジックの場合、選択肢のリストを保存し、ランダムなものを選択して**リストから削除する方が、それは再び選択することはできず、リストは毎回小さくなります。 :) – xander
また、java.util.Collections.shuffle()メソッドを見ることもできます。 – Henry