【问题标题】:Changing the number of dimensions an Java array has更改 Java 数组的维数
【发布时间】:2018-05-20 01:36:15
【问题描述】:

有没有办法改变数组的维数,即制作这个

int[][] i = new int[3][3];

但是像这样使用它

getArray(i); //where getArray only accepts one dimensional arrays

?

【问题讨论】:

  • @StephenC 是的,尽管我对对象的事情感到困惑。这有什么帮助(我是新的“对象”对象类型)
  • @pkpnd - 不是重复的。这个问题实际上是关于访问,而不是转换/重塑数组。 (是的,我知道 OP 说“改变”......但这不是他的例子正在做的......根据我对 getter 所做的解释。)
  • @AlexDukhan 是否要将i 转换为一维数组int[9],以便getArrayint 元素进行操作?或者,您是否希望getArray 对包含在i 中的int[] 元素进行操作?
  • 这正是我的问题,你对数组做了什么

标签: java arrays


【解决方案1】:

您不能更改 Java 数组或数组类型中的维数。

但是您可以利用 Java 数组是一个对象 ... 和子类型 .. 的事实,并像这样声明一个 getArray 方法:

 Object getArray(Object[], ...) { .... }

您可以在int[][] 实例上调用此方法,但需要运行时类型转换才能将结果转换为int[]

例如:

Object getArray(Object[] array, int i) { return array[i]; }

int[][] big = new int[3][3];
int[] slice = (int[]) getArray(big, 0);

另一方面,如果你真的要问如何将多维数组展平成一维数组,getArray 方法需要分配一个新数组,填充它从原件退回。

请注意,您将返回一个未连接到原始数组的全新数组。并且复制一个 N x N .... x N 数组很昂贵。

更多详情:Flatten nested arrays in java

【讨论】:

  • 好吧,我想我明白了,你只是在贬低它。我将在我的代码中使用它。谢谢大家的帮助!
【解决方案2】:

Java 是静态类型语言。这意味着您不能在运行时更改变量的类型。但在这种特殊情况下,您可以简单地使用以下调用:

getArray(i[2]); // put anything between 0 and (outerArrayLength-1) instead of 2 here

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 2018-06-25
    • 2020-03-27
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    相关资源
    最近更新 更多