2013-08-27 3 views
0

Я хочу спросить, как генерировать не повторяющиеся числа в моих кнопках. Я хочу создать не повторяющийся номер, потому что всякий раз, когда я запускаю свой проект, он показывает все одинаковые числа., обрабатывающий случайные числа в android

Ниже приведен код, у меня есть:

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]); 

Я хочу знать, как установить один, два и три кнопки не имеющий то же значение, если это возможно.

+5

Вы пытались вызвать 'Math.random' три раза, один раз для каждой кнопки? –

+0

и, вероятно, вы получите 'ArrayIndexOutBoundException' – nachokk

+0

возможный дубликат [Не повторяющиеся случайные числа] (http://stackoverflow.com/questions/4897410/non-repeating-random-numbers) – chrylis

ответ

1

В андроиде вы можете создать случайное число, подобное этому. При необходимости вы можете использовать min и max вместо массива.

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

Чтобы перепроверить, что вы не получаете то же случайное число вам просто нужно немного логики, которая проверяет, если он уже был создан. Вы можете придерживаться своего массива и удалять этот номер перед следующим вызовом. Или просто проверьте сохраненное целое число перед повторным вызовом, если вы используете min и max.

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))); 

И если вы хотите, чтобы ваши номера, чтобы быть не повторяющееся, вы можете, например, использовать набор:

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. 
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;  
} 
+0

С помощью этого вы можете генерировать '1, 3, 1'. Это не повторяется, но содержит дубликаты. Я думаю, что ОП этого не хочет. –

+0

@ArnaudDenoyelle В этом случае у меня вопрос неправильный. Ну что ж.. –

Смежные вопросы