好的,我想通过反射将所有元素打印在随机N维数组中。该解决方案效果很好,除了在arraysString
字符串的末尾有N-1个空数组。例如:
private int[] arr = {3, 4, 5};
private int[][] arrs = {{3, 4}, {3, 4, 5}, {3}};
好吧,当我尝试序列化第一个数组时,它将打印-> [3,4,5],但是当我打印第二个数组时-> [3,4] [3,4,5] [3]打印[]。我对为什么会这样感到困惑。这是我的功能:
private void serializeToArray(Object array, List<String> arraysAsString) {
StringBuilder builder = new StringBuilder();
List<String> arrayOutputs = new ArrayList<>();
int length = Array.getLength(array);
builder.append('[');
for (int i = 0; i < length; i++) {
Object arrayElement = Array.get(array, i);
if (isArray(arrayElement)) {
serializeToArray(arrayElement, arraysAsString);
continue;
}
arrayOutputs.add('"' + arrayElement.toString() + '"');
}
builder.append(String.join(",", arrayOutputs));
builder.append(']');
arraysAsString.add(builder.toString());
}
isArray->
protected boolean isArray(Object obj){
return obj.getClass().isArray();
}
答案 0 :(得分:1)
对于2D数组输入,当递归调用返回时,您将字符串[]
添加到输出List
。
为避免这种情况,请更改
arraysAsString.add(builder.toString());
到
if (builder.length () > 2 || length == 0) {
arraysAsString.add(builder.toString());
}
这将从以下更改输出
[["3","4"], ["3","4","5"], ["3"], []]
到
[["3","4"], ["3","4","5"], ["3"]]