2011-01-29 3 views
1

Можно ли динамически объявлять массивы или переменные после компиляции? Я спрашиваю, потому что это единственный способ, который я могу решить, чтобы решить эту проблему, в которой я работал.Типы данных на лету

То, что я пытаюсь сделать, это взять произвольно большой набор чисел, найти средний диапазон и разделить это множество на два меньших подмножества. Kinda, как quicksort (который я понятия не имею, как реализовать, кстати).

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

Так, например, если пользователь задает 8 уровней, то программа должна иметь возможность разделить исходный набор с описанным выше методом и повторить это со всеми последующими подмножествами. Мне кажется, что для упорядочивания чисел таким образом потребовалось бы использование массивов, следовательно, проблема, с которой я сталкиваюсь.

Есть ли более простой способ приблизиться к этой проблеме? Если есть, я бы очень признателен за понимание. А если нет, как я могу сделать то, что я описал выше?

Чтобы уточнить, я пишу эту программу на Java, и нет, это не домашнее задание.

Спасибо, кучка.

+3

Первый: на каком языке программирования это? Различные языки имеют разные отличия от типизации и декларации; и не все даже требуют декларации per se ... – StaxMan

+0

Зависит от используемого языка. –

+0

Это вопрос о домашнем задании? Если это так, вы можете пометить его как таковой и предоставить наилучший результат для решения, чтобы получить быстрые и релевантные ответы. – Apalala

ответ

2

Вы можете сделать это с помощью 2D-массива (который представляет собой массив массивов). Эта первоначальная декларация может быть:

int[][] array; 

Когда вы знаете, сколько Подмассивы вам нужно, вы можете создать массив с одним известное измерение:

array = new int[8][]; 

Вы создали массив, который может содержать 8 подмассивов типа int [], но подмассивы еще не существуют. Чтобы создать его, вы можете сделать это:

array[0] = new int[15]; 
array[1] = new int[12]; 
// etc. 

Обратите внимание, что каждый подрамник может быть другого размера, если вы хотите.

+0

Ох. Итак, это означает, что я могу использовать пользовательский ввод, назначая его переменной, являющейся размером массива, а затем генерировать последующие массивы, когда они мне нужны? – danem

+0

Спасибо за помощь. Я не уверен, почему я не сразу подумал об этом ... Еще раз спасибо ха-ха. – danem

0

Вы описываете recursive function.

Кроме того, если вы хотите что-то вроде int [], но не знаете размер на времени инициализации, ArrayList позволит вам .add() любое количество объектов Integer.

Обратите внимание, что вы сказали, время компиляции и я сказал время инициализации. Вам не нужно жестко кодировать длину массива во время компиляции. Это может быть инициализирован с переменной типа так:

int[] items = new int[x](); 
+0

А, да, хорошо. Спасибо за помощь. Я думаю, что сейчас трудно понять, как его реализовать. Но хороший материал. Я бы проголосовал за тебя, если бы мог ха-ха. – danem

0

Мне нравится использовать массив, но и для создания вложенных наборов или вспомогательный список, используя список может быть лучшим выбором.

List<Integer> ints = new ArrayList<Integer>(); 
for(int i=0;i<128;i++) ints.add(i); 

int subLists = 8; 
int subListSize = (ints.size() + subLists - 1)/subLists; 
List<List<Integer>> intsList = new ArrayList<List<Integer>>(); 
for(int i = 0; i < ints.size(); i += subListSize) 
    intsList.add(ints.subList(i, Math.max(i+subListSize, ints.size()))); 
+0

ой ничего себе. Я пытался реализовать его в течение последних нескольких часов, это могло быть гораздо лучшим решением. Я собираюсь попытаться обернуть голову вокруг этого и рассказать вам, как это работает. – danem

+0

Одна вещь, которую я не понимаю, - это то, почему вы сделали размер подсписчика в этом значении ..... 17 О, и последняя строка озадачивает ха-ха. Что я вижу, что вы добавляете подсписку ...? – danem

+0

Чтобы уточнить, список чисел является случайным. И я сортирую его, используя метод, похожий на быстрый сортировку, создающий двоичное дерево. Я могу ошибаться, но этот метод, похоже, полагается на число, последовательное ... правильно? хе. Или я просто ошибаюсь. – danem

Смежные вопросы