动态数据类型

时间:2011-01-29 00:52:54

标签: java arrays arraylist theory

编译后是否可以动态声明数组或变量?我问,因为这是我能解决这个问题的唯一方法,我一直在努力。

我要做的是采用一组任意大的数字,找到中间范围,并将该组划分为两个较小的子集。有点像快速排序(我不知道如何实现)。

我认为我需要能够在编译后声明这些数据类型的原因是因为我希望能够根据用户输入创建任意数量的子集。

因此,例如,如果用户指定8个级别,则程序应该能够使用上述方法划分原始集合,并对所有后续子集重复该级别。在我看来,为了以这种方式组织数字需要使用数组,因此我遇到了问题。

有没有更简单的方法来解决这个问题?如果有,我真的很感激一些见解。如果没有,我怎么能做我上面描述的呢?

为了澄清,我用Java编写这个程序,不,这不是一个家庭作业。

非常感谢。

3 个答案:

答案 0 :(得分:2)

您可以使用2D数组(数组数组)执行此操作。这个初始声明可能是:

int[][]  array;

当您知道需要多少个子阵列时,可以使用一个已知维度创建数组:

array = new int[8][];

您现在已经创建了一个数组,该数组可以容纳8个int []类型的子数组,但子数组尚不存在。要创建一个,您可以这样做:

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

请注意,如果需要,每个子阵列可以具有不同的大小。

答案 1 :(得分:0)

您正在描述recursive function

另外,如果你想要一个像int []但不知道初始化时间的大小,那么ArrayList将允许你.add()任意数量的Integer对象。

请注意,您说编译时间,我说初始化时间。您不需要在编译时硬编码数组的长度。它可以用如下变量初始化:

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

答案 2 :(得分: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())));
相关问题