获取数组(大于2D)java的维度

时间:2016-12-26 11:03:34

标签: java arrays multidimensional-array

我在c#中找到了这个问题的答案,但在java中找不到。我想让我自己的类使用向量和矩阵,并执行各种操作,如点积。由于数组将被传递给类,而不事先知道它的尺寸,因此了解它是很重要的。我想知道是否有任何功能可以得到它。提前致谢。这是一个例子:

int[] array = new int[10]; //this would be a 1D array of length 10

int[][][] array2 = new int[5][10][2]; //This one is 3D of length 100

我想要的是“方括号的数量”,它表示数组的维度。

2 个答案:

答案 0 :(得分:1)

一个简单的解决方案是使用Class#isArrayClass#getComponentType创建递归方法:

public class ArrayDimensions
{
    public static void main(String[] args)
    {
        Integer a = null;
        Integer a0 = 0;
        int a1[] = new int[0];
        int a2[][] = new int[0][0];
        int a3[][][] = new int[0][0][0];
        int a4[][][][] = new int[0][0][0][0];

        System.out.println(getDimensions(a)); // Prints -1
        System.out.println(getDimensions(a0)); // Prints 0
        System.out.println(getDimensions(a1)); // Prints 1
        System.out.println(getDimensions(a2)); // Prints 2
        System.out.println(getDimensions(a3)); // Prints 3
        System.out.println(getDimensions(a4)); // Prints 4
    }

    private static int getDimensions(Object array)
    {
        if (array == null)
        {
            return -1;
        }
        return getDimensions(array.getClass());
    }

    private static int getDimensions(Class<?> c)
    {
        if (c == null)
        {
            return 0;
        }
        if (!c.isArray())
        {
            return 0;
        }
        return 1 + getDimensions(c.getComponentType());
    }
}

附注:尽管可能存在这种方法的应用案例,但是基于原始多维数组编写“矩阵和矢量库”的意图听起来有点可疑(它不一定是“错误的”,但是但可疑的)

答案 1 :(得分:0)

我不明白你的要求,但你可以这样做:

int getBracketCount(Object array) {
    String className = array.getClass().getName();

    int bracketCount = className.length() - className.replace("[", "").length();
    return bracketCount;
}

数组的类名称带有N个方括号,后跟数组的类名,其中N是数组的维数。

因此,对于int[][][],类名称将类似于[[[I。类名中的三个方括号=三维。对于简单对象,不应在类名中使用方括号。

以下是演示:http://ideone.com/he8FDF