【问题标题】:Data Types on the fly动态数据类型
【发布时间】:2023-03-28 09:40:01
【问题描述】:

编译后可以动态声明数组或变量吗?我问是因为这是我能想到的解决这个问题的唯一方法。

我想做的是取一组任意大的数字,找到中间范围,然后将该集合分成两个较小的子集。有点像快速排序(顺便说一下,我不知道如何实现)。

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

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

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

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

非常感谢。

【问题讨论】:

  • 第一:这是用哪种编程语言?不同的语言有非常不同的类型和声明约束;并不是所有的都需要声明本身......
  • 取决于使用的语言。
  • 这个问题是关于作业的吗?如果是这样,您可以将其标记为如此,并提供最佳解决方案以获得及时和相关的答案。
  • 不,不是关于家庭作业。只是想写一个我一直在想的程序。并且它在 Java 中。

标签: java arrays arraylist theory


【解决方案1】:

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

int[][]  array;

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

array = new int[8][];

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

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

请注意,如果您愿意,每个子数组的大小可以不同。

【讨论】:

  • 哦。好的,这意味着我可以将用户输入分配给作为数组大小的变量,然后根据需要生成后续数组?
  • 感谢您的帮助。我不知道为什么我没有立即想到这样做......再次感谢哈哈。
【解决方案2】:

您正在描述recursive function

此外,如果您想要 int[] 之类的东西,但不知道 初始化时的大小,ArrayList 将允许您 .add() 任意数量的 Integer 对象。

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

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

【讨论】:

  • 啊,是的,好吧。谢谢您的帮助。我认为现在最困难的部分将是弄清楚如何实施它。不过好东西。如果可以,我会投票给你哈哈。
【解决方案3】:

我喜欢使用数组,但使用列表创建子集或子列表可能是更好的选择。

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

【讨论】:

  • 哇哦。过去几个小时我一直在尝试实现它哈哈,这可能是一个更好的解决方案。我会试着解决这个问题,然后告诉你结果如何。
  • 我不明白的一件事是为什么您将子列表大小设置为该值.....17哦,最后一行令人费解哈哈。我看到的是您正在添加子列表....?
  • 澄清一下,数字列表是随机的。我正在使用类似于快速排序的方法对其进行排序,从而产生排序的二叉树。我可能弄错了,但这种方法似乎依赖于连续的数字......对吗?呵呵。或者我可能只是错了。
  • 列表依赖于被排序的数字。子列表是原始列表上的“视图”,因此如果您更改原始列表,子列表似​​乎也会发生变化,反之亦然。通常您会使用快速排序或二叉树对数据进行排序。这些数字不需要排序,事实上奇怪的是,您可以在获取子列表后对数字进行排序。
猜你喜欢
  • 1970-01-01
  • 2018-12-16
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 2021-01-29
  • 2015-05-03
  • 2021-08-07
相关资源
最近更新 更多