gpt4 book ai didi

java - 在 Java 中使用反射迭代 Nd 数组的问题

转载 作者:行者123 更新时间:2023-11-30 05:36:24 24 4
gpt4 key购买 nike

好吧,我想通过反射打印随机 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();
}

最佳答案

对于 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"]]

关于java - 在 Java 中使用反射迭代 Nd 数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56523704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com