我在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
我想要的是“方括号的数量”,它表示数组的维度。
答案 0 :(得分:1)
一个简单的解决方案是使用Class#isArray
和Class#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