Привет!
Есть простой массив Object[] arr = new int[50]
заполненный некими значениями, также есть другой массив Object[][][][][] fiveDArr
, правда он 5-ти мерный, нужно скопировать все значения из первого в 5-ти мерный массив так чтобы было типа:fiveDArr[arr][arr][arr][arr][arr]
Пробовал такое:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 2; k++) {
for (int n = 0; n < 2; n++) {
for (int m = 0; m < 2; m++) {
System.arraycopy(arr, 0, fiveDArr[i][j][k][n][m], 0, 50);
}
}
}
}
}
к сожалению словил NullPointerException.
Зачем вам это фиг знает, но пусть будет так:
Object[] objArr = new Object[50]//инициализированный где-то снаружи массив
int incremetObjArr = 0;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 2; k++) {
for (int n = 0; n < 2; n++) {
for (int m = 0; m < 2; m++) {
fiveDArr[i][j][k][n][m] = objArr[incremetObjArr++];
}
}
}
}
}
Но судя по всему ваш 5 мерный массив вмещает 2 в 5 степени т.е 32 элемента, а вам надо 50.
Задача оказалась сложнее и лежит в области комбинаторики (все возможно уникальные последовательности объектов из одного массива).
Нашел очень хороший ответ с формулами, примерами и кодом тут рядом комбинаторика на ru.SO.com. Там все подробно описано, повторять тут теорию не буду. Если смогу - дополню кодом, но позже.
Поправьте если не прав, но судя по посту сверху все возможные комбинации 50 объектов == факториалу от 50 == 30414093201713378043612608166064768844377641568960512000000000000
т.е. должно быть 50 вложенных циклов, а не 5. Моему компьютеру удалось уместить 1,5 млн объектов на 256 мб RAM, а число сверху я даже произнести не могу, не то чтобы представить сколько памяти надо =)
Поэкспериментировал на массиве в 5 элементов (5 вложенных циклов). Только собирал не массивы, а строки с указанием индекса элемента и складывал их в Set
, чтобы точно исключить повторы. Пришел пока к единственному решению (для человека незнакомого с комбинаторикой напрочь).
По сути в решении используются 5 система счисления, где каждая цифра будет обозначать номер элемента в исходном массиве.
int arraySize = 5;
Set<String> set = new HashSet<>();
for (int y = 0; y <arraySize ; y++) {
for (int x = 0; x < arraySize; x++) {
if (y == x) continue; // такие if в начале каждого цикла, чтобы исключить повторы цифр внутри последовательности
for (int i = 0; i < arraySize; i++) {
if (x == i || y == i) continue;
for (int j = 0; j < arraySize; j++) {
if (i == j || x == j || y == j) continue;
for (int k = 0; k < arraySize; k++) {
if (j == k || i == k || x == k || y == k) continue;
String e = "" + x + i + j + k;
set.add(e);
}
}
}
}
}
Полностью этот код с выводом по ссылке Ideone.com.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Чем отличается List от ArrayListПогуглил, но толком ничего не нашел (как минимум, на русском языке)
Подскажите пожалуйста как можно сделать что б в datetime-local всегда выдавался 24 часовой пояс либо как можно его заменить либо хотя бы изменить...
Доброго времени сутокК сожалению я только новенький в программировании и много не понимаю, но буду очень благодарен за помощь