我知道这是一个愚蠢的问题,但我想知道是否有可能找到数组维度?当我们有以下代码时
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方法中编写一些通用代码来识别数组维度吗?
答案 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数组中的行数。
答案 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