Это похоже на домашнюю работу (или вопрос интервью?).Если это так, и вам необходимо использовать массивы, а не встроенные методы с объектами коллекции Java (или даже если это не так, на самом деле), ответом является алгоритм Фишера-Йейтса Shuffle
Современное перемешивание на месте:
To shuffle an array a of n elements (indexes 0..n-1):
for i from n − 1 downto 1 do
j ← random integer with 0 ≤ j ≤ i
exchange a[j] and a[i]
(я должен проверить, но я подозреваю, что именно это Java использует под капотом для своих shuffle()
методов).
Редактируйте, потому что интересно реализовывать алгоритмы:
В Java это будет:
public static void main(String[] args) {
int[] a = new int[15];
for (int i = 1; i <= 15; i++)
{
a[i-1] = i;
}
Random rg = new Random();
int tmp;
for (int i = 14; i > 0; i--)
{
int r = rg.nextInt(i+1);
tmp = a[r];
a[r] = a[i];
a[i] = tmp;
}
for (int i = 0; i < 15; i++)
System.out.print(a[i] + " ");
System.out.println();
}
И ... это можно дополнительно оптимизировать с помощьюверсия алгоритма наизнанку, так как вы хотите вставить известный ряд чисел в случайном порядке. Следующее является наилучшим способом достижения того, что вы заявили как желающего сделать, поскольку нет дополнительных копий, таких как при создании ArrayList
и повторном копировании его в массив .
a = new int[15];
Random rg = new Random();
for (int i = 0; i < 15; i++)
{
int r = rg.nextInt(i+1);
a[i] = a[r];
a[r] = i+1;
}