0

ボタンに繰り返しのない数字を生成する方法を知りたいです。プロジェクトを実行するたびに同じ数字が表示されるため、繰り返しのない数字を生成したいと考えています。

以下は私が持っているコードです:

int arr1[]={1,2,3,4,5,6,7,8,9,10};
int num=(int)(Math.random()*10);
    one.setText(""+arr1[num]);
    two.setText(""+arr1[num]);
    three.setText(""+arr1[num]);

可能であれば、同じ値を持たない1つ、2つ、3つのボタンを設定する方法を知りたいです。

4

3 に答える 3

3

あなたのコードは以下とほぼ同等です:

int arr1[]={1,2,3,4,5,6,7,8,9,10};
int num = arr1[(int)(Math.random()*10)];
one.setText(""+num);
two.setText(""+num);
three.setText(""+num);

そのため、同じ数が 3 回表示されます。

配列の代わりにRandom#nextInt(int n)を使用し、3 つの乱数を生成する必要があります。

Random r = new Random();
one.setText(Integer.toString(1 + r.nextInt(10)));
two.setText(Integer.toString(1 + r.nextInt(10)));
three.setText(Integer.toString(1 + r.nextInt(10)));

また、数字を繰り返さないようにしたい場合は、たとえば Set を使用できます。

Random r = new Random();
Set<Integer> randomNumbers = new HashSet<Integer>();
while(randomNumbers.size() <= 3){
  //If the new integer is contained in the set, it will not be duplicated.
  randomNumbers.add(1 + r.nextInt(10));
}
//Now, randomNumbers contains 3 differents numbers.
于 2013-08-27T16:15:04.557 に答える
1

Androidでは、このような乱数を生成できます。必要に応じて、配列の代わりに最小値と最大値を使用できます。

int min = 1;
int max = 10;
Random r = new Random();
int someRandomNo = r.nextInt(max - min + 1) + min;
one.setText(""+someRandomNo);

同じ乱数を取得しないことを再確認するには、それが既に生成されているかどうかを確認するロジックが必要です。配列に固執して、次の呼び出しの前にその番号を削除できます。minまたは、 andを使用する場合は、再度呼び出す前に格納された整数を確認してくださいmax

于 2013-08-27T16:12:56.173 に答える
0
private int previous = -1000; // Put a value outside your min and max

/**
 * min and max is the range inclusive
 */
public static int getRandomNumber(int min, int max) {

    int num;

    do {

        num = min + (int)(Math.random() * ((max - min) + 1));

    } while(previous == num); // Generate a number that is not the same as previous

    previous = num;

    return num;    
}
于 2013-08-27T16:21:46.013 に答える