【问题标题】:java increase dimension in arrayjava增加数组的维数
【发布时间】:2012-10-30 06:47:14
【问题描述】:

制作动态多维数组是否可能(我确信它是)并且不太复杂,如果需要,它会增加维度?

// Array[] 1 has 2 dimensions
if(blah=blah)
{
   Array[] 1 gets second dimension and is now Array[][]
}

【问题讨论】:

  • 您的意思是用 int[][] 替换 int[],还是只是调整 int[] 的大小?
  • 你将很难做到这一点,因为int[]int[][] 在内存中的存储方式不同。您能否提供为什么需要此功能的背景信息?也许有一种更适合您的解决方法。
  • @TheCapn 我正在尝试制作一个简单的纸牌游戏并让计算机玩它并找到游戏的所有结果并给出最佳结果。游戏中的每一步都会被记录下来。我想将所有结果存储在一个大数组中,以便我可以查看它并选择最好的。问题是,我不知道在游戏结束之前我必须采取多少步骤,所以这就是我认为 miltidim 的原因。数组最适合我。你怎么看?

标签: java multidimensional-array arraylist dimensions


【解决方案1】:

不,不可能:数组的维数是数组type的属性,而不是数组object的属性,所以你不能这样做内置 Java 数组。

为了模拟可以在运行时更改维数的数组,您需要构建自己的类。您可以将该类基于数组或ArrayList,但会有一个限制:您将无法在模拟数组上使用下标运算符。

还有一个“丑陋”的解决方案:你可以在没有类型的情况下存储你的数组——本质上,作为一个无类型的Object。您可以将任意维数的数组分配给Object 类型的变量,如下所示:

Object a = new int[10];
a = new int[10][2];
a = new int[10][2][5];

问题是如果不执行强制转换,您将无法访问此类数组的元素:

a[2][1][0] = 7; // Will not compile

这将编译并工作,但结构相当不可读:

((int[][][])a)[2][1][0] = 7;

另请注意,数组的先前内容将在重新分配时丢失,除非您对其进行复制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2021-10-01
    • 2020-05-24
    • 2012-11-12
    • 2015-05-26
    • 1970-01-01
    • 2019-12-19
    相关资源
    最近更新 更多