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

Функцию, которые вы нашли в интернете, написана правильно, тут я не знаю в чем проблема.

→ Ссылка