(solved) Как перемешать элементы массива на Java? Shuffle - проблема в типах данных
(отредактировал вопрос, убрал ночной бред)
Создаю массив (0,1,2...44), задается так:
int[] myOrder = new int[mQuestionBank.length-1];
for(int i=0; i<mQuestionBank.length-1; i++) {
myOrder[i] = i;
}
В дебагере массив есть, элементы созданы, от 0 до 44, все норм. Пробую перестроить элементы массива в рандомном порядке:
List<String> myNewOrder = Arrays.asList(myOrder);
Collections.shuffle(myNewOrder);
Но возникает ошибка с типами данных, предлагается так:
List<int[]> myNewOrder = Arrays.asList(myOrder);
Collections.shuffle(myNewOrder);
Ну, ок, я так себе програмер, соглашаюсь. Но теперь уже отладчик говорит, что:
error: incompatible types: int[] cannot be converted to String[]
Что этому Android-у надо?
Нашел в сети пример, вроде один-в-один мой случай:
// Implementing Fisher–Yates shuffle
static void shuffleArray(int[] ar) {
Random rnd = new Random();
for (int i = ar.length - 1; i > 0; i--) {
int index = rnd.nextInt(i + 1);
// Simple swap
int a = ar[index];
ar[index] = ar[i];
ar[i] = a;
}
}
// создадим массив и перемешаем его
int[] mSolutionArray = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14 };
shuffleArray(mSolutionArray);
Log.i("Array", Arrays.toString(mSolutionArray));
По этому примеру пытаюсь выполнить shuffleArray(myOrder). И облом. Вижу вокруг много примеров о сортировке, жутко неудобно такой вопрос спрашивать, но туплю уже. Почему с типами данных у меня возникает проблема?
Ответы (1 шт):
Первую часть вопроса вообще не понял, так что пропущу.
Строчкой:
List<String> myNewOrder = Arrays.asList(myOrder);
Вы пытаетесь преобразовать массив int в список String, что уже не правильно.
Следующей строчкой:
List<int[]> myNewOrder = Arrays.asList(myOrder);
Вы пытаетесь преобразовать массив int в список массивов int[], то есть из массива в список массивов, что очевидно так же не правильно.
Вам же нужно преобразовать массив int в список int. Для этого нужно использовать не примитивный тип int, а класс обертку Integer.
То есть:
Integer[] myOrder = new Integer[mQuestionBank.length - 1];
for(int i = 0; i < mQuestionBank.length - 1; i++) {
myOrder[i] = i;
}
List<Integer> myNewOrder = Arrays.asList(myOrder);
Collections.shuffle(myNewOrder);
Функцию, которые вы нашли в интернете, написана правильно, тут я не знаю в чем проблема.