找到数组的维度

时间:2014-04-02 07:14:11

标签: java

我知道这是一个愚蠢的问题,但我想知道是否有可能找到数组维度?当我们有以下代码时

public class ArrayDimentionCheck {

  public static void main(String[] args) {
    Integer[][] arr = { { 1, 2 }, { 2, 3 } };
    printDimension(arr);
    Integer[][] arr1 = { { 1, 2, 4 }, { 2, 3, 6 } };
    printDimension(arr1);
  }

  private static void printDimension(Object arr) {
    System.out.println("given object dimension:");
  }
}

我们可以在printDimension方法中编写一些通用代码来识别数组维度吗?

5 个答案:

答案 0 :(得分:3)

  

但是我希望得到以下格式的arr它应该是2x2和arr1 3x2

你应该知道,在java中你可以这样做:

Integer[][] arr = { { 1, 2 }, { 1, 3, 4, 5 } };

因此,以下代码不适用于jagged arrays

它也适用于0长度数组,例如:

new boolean[11][0][4]

这里的代码是:

public static void printDimension(Object array) {
    if (array == null) {
        System.out.println("Object is null!");
        return;
    }

    if (!array.getClass().isArray()) {
        System.out.println("Object is not array!");
        return;
    }

    String ans = "";
    Object cur = array;
    while (cur != null && cur.getClass().isArray()) {
        ans += "x" + Array.getLength(cur);

        if (!cur.getClass().getComponentType().isPrimitive()) {
            cur = ((Object[]) cur)[0];
        } else {
            break;
        }
    }

    System.out.println(ans.substring(1));
}

使用示例:

printDimension(new boolean[1][11]);
printDimension(new boolean[1][11][4]);
printDimension(new Integer[14][88]);

输出:

1x11
1x11x4
14x88

答案 1 :(得分:2)

2-D数组是一个数组数组。因此每个数组可以具有可变长度(在2-D数组的情况下表示列)。您可以使用

获取单个数组的长度
args[0].length;
args[1].length;  

等等

和使用

的整个二维数组的长度
args.length  

是2-D数组中的行数。

相关问题:Multi-Dimension length array reflection java

答案 2 :(得分:1)

您可以使用Array.length来了解长度..通过使用它,您可以找到维度。例如

    int xx = arr.length;  // will return the number of row
    int yy = arr[0].length;  // will return the number of column

N.B。假设每一行都有相同数量的列

答案 3 :(得分:1)

我认为你要求obj是单维或双维或......数组类型。

private static void printDimension(Object arr) {
    final String className = arr.getClass().toString();
    Pattern pattern = Pattern.compile("([\\[])");
    Matcher matcher = pattern.matcher(className);
    int count = 0;
    while (matcher.find()) count++;
    int length = count>1?((Object[][])arr)[0].length:0;
    System.out.println("given object dimension:"+count+"x"+length);
}

...

Integer[][][] arr = new Integer[3][2][2];
printDimension(arr);
Integer[] arr1 = {};
printDimension(arr1);
printDimension(new Object());

结果:

given object dimension:3x2
given object dimension:1x0
given object dimension:0x0

答案 4 :(得分:1)

您可以使用递归和反射找到数组的尺寸。

给出方法dimensions

private int dimensions(Class arrayType)
{
  return arrayType.isArray() ? 1 + dimensions(arrayType.getComponentType()) : 0
}

这样调用dimensions方法时:

int[] oneDimensionalArray = new int[0];
int[][] twoDimensionalArray = new int[0][0];
int[][][] threeDimensionalArray = new int[0][0][0];

System.out.println(dimensions(oneDimensionalArray.getClass()));
System.out.println(dimensions(twoDimensionalArray.getClass()));
System.out.println(dimensions(threeDimensionalArray.getClass()));

将打印:

1
2
3