2012-01-23 4 views
1

Я новичок в Android, а также в java. в моем приложении именно то, что мне нужно, это случайные числа, которые не будут повторяться еще раз.как поместить данные в массив целых чисел

для примера Скажем, у меня есть TextView и кнопка при нажатии кнопки, она должна показывать мне случайные числа, и эти случайные числа не повторяются.

Для этого я думал хранить случайные данные в массиве и проверять, находится ли случайное число в массиве или нет. Если его нет в массиве, он будет хранить это число на время. Например, при первом нажатии на него должен показать мне какое-то случайное число, например, между 1-20, скажем, что оно выбрано 5, теперь это значение должно быть сохранено в массиве и при нажатии следующей кнопки, если снова появится 5 номеров, тогда он должен пропустить это число.

Пожалуйста, помогите мне по этому поводу,

+0

Что вопрос? –

+0

Можете ли вы показать код? – Oyeme

ответ

1

Говоря о структуре данных, чтобы хранить ваши генерироваться случайным образом рассмотреть возможность использования java.util.Set для хранения уникального набора чисел. Чтобы проверить, существует ли номер в Set, используйте метод Set#contains(Object o).

КОД:

int max = 20; 
System.out.println("Generating random integers in range 0.." + max); 
Set<Integer> set = new HashSet<Integer>(max); 
Random randomGenerator = new Random(); 
while (set.size() <= max) { 
    int randomInt = randomGenerator.nextInt(max+1); 
    System.out.println("Generated : " + randomInt); 
    if (!set.add(randomInt)) 
     System.out.println("Set already has: " + randomInt); 
} 
System.out.println("Set has: " + set); 
+0

Можете ли вы дать какой-то код, чтобы объяснить это моему другу. – MADDY

+0

Кроме того, 'Set.add' вернет' false', если элемент, который будет добавлен, уже содержится в 'Set'. Это не позволит вам добавить дублирующий элемент. – z12345

+0

@MADDY: Я добавил код для вас. – anubhava

1

Создание массива с вашими числами в последовательности. Затем используйте алгоритм Fisher-Yates shuffle для генерации уникальной, не повторяющейся случайной последовательности.

// Fisher-Yates shuffle. 
Random random = new Random(); 
int[] data = new int[20]; 
for (int i=0; i<20; i++) 
{ 
    data[i] = i; 
} 
for (int i=0; i<20; i++) 
{ 
    int j = random.nextInt(20); 
    int t = data[i]; 
    data[i] = data[j]; 
    data[j] = t; 
} 
0

Я думаю, что этот вопрос связан с Java, а не с Android.

Если вам нужно только создать небольшой набор уникальных случайных чисел, вы можете сохранить сгенерированные числа на карте, чтобы вы могли определить в O (1), если раньше было создано число. Если он не был создан ранее, используйте его и поместите в карту. Else создайте новый и повторите.

+0

Можете ли вы привести какой-либо пример моего друга. Как вы сказали, как это сделать, вы можете объяснить мне пример .it будет хорошей помощью – MADDY

1

Сначала необходимо создать экземпляр Random. Это создаст для вас случайные числа. Затем вы должны сохранить все свои уже сгенерированные числа в ArrayList<Integer>, чтобы вы могли отслеживать свои сгенерированные числа.

Random mRandom=new Random(); 
//Generate first number, int [0,20) 
int no=mRandom.nextInt(20); 
//keep that number 
ArrayList<Integer> mGeneratedSoFar=new ArrayList<Integer>(); 
mGeneratedSoFar.add(no); 

затем в вашей кнопки обработчик щелчка, генерировать номер, который не был создан до сих пор:

int no=mRandom.nextInt(20); 
while(mGeneratedSoFar.contains(no)){ 
    no=mRandmom.nextInt(20); 
} 
mGeneratedSoFar.add(no); 

Edit: и, как сказал @Guido Гарсиа, вы можете сохранить ваши номера в других типах от Collection или в Maps для лучшей производительности. Но пока вы производите несколько цифр, я не думаю, что это будет проблемой.

+0

на 2-й строчке, он дает ошибку, как указано ниже – MADDY

+0

Невозможно сделать статическую ссылку на нестатический метод nextInt (int) из типа Random – MADDY

+0

Это была небольшая ошибка. отредактировал ответ. –

0
java.util.Random generator;  
java.util.Set<Integer> nums; 
nums.add(generator.nextInt(20)); 
Смежные вопросы