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

Java 获取数组(大于2D)的维数,java,arrays,multidimensional-array,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 le

我在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

我想要的是“方括号数”,它表示数组的尺寸。

我不知道您要求的原因,但您可以这样做:

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

    int bracketCount = className.length() - className.replace("[", "").length();
    return bracketCount;
}
数组的类名后面有N个方括号,后面是数组的类名,其中N是数组的维数

因此,对于
int[][]
,类名类似于
[[I
。类名中的三个方括号=三维。对于简单对象,类名中不应包含方括号


下面是一个演示:

一个简单的解决方案是使用和创建递归方法:

公共类数组维度
{
公共静态void main(字符串[]args)
{
整数a=null;
整数a0=0;
int a1[]=新int[0];
int a2[][]=新int[0][0];
int a3[][]=新int[0][0][0];
int a4[][]]=新int[0][0][0][0];
System.out.println(getDimensions(a));//Prints-1
System.out.println(getDimensions(a0));//打印0
System.out.println(getDimensions(a1));//打印1
System.out.println(getDimensions(a2));//打印2
System.out.println(getDimensions(a3));//打印3
System.out.println(getDimensions(a4));//打印4
}
私有静态整型getDimensions(对象数组)
{
if(数组==null)
{
返回-1;
}
返回getDimensions(array.getClass());
}
私有静态int-getDimensions(c类)
{
如果(c==null)
{
返回0;
}
如果(!c.isArray())
{
返回0;
}
返回1+getDimensions(c.getComponentType());
}
}


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

@反斜杠我指的不是长度,而是尺寸(它有多少方括号。[]将是1,而[]将是3).现在,问题是:你为什么需要这个?编码时你会得到这些信息,即使你将数组传递给一个方法,你也不能将多维数组传递给一个只接受一维数组和反之亦然的方法,所以在这个方法中你肯定知道这些信息。你想做什么?到此为止投票者:这不是问2D数组大小的问题的重复。这是关于数组的尺寸的问题,数组只被称为
object
类型的对象。但是,正如我现在注意到的,这是一个重复的问题。。。
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());
    }
}