java - 在Java中使用反射迭代Nd数组的问题
问题描述
好的,所以我想通过反射打印随机 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());
}
是数组->
protected boolean isArray(Object obj){
return obj.getClass().isArray();
}
解决方案
对于 2D 数组输入,当递归调用返回时,您将 String 添加[]
到 output 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"]]
推荐阅读
- css - 手机上的视频宽度
- typescript - 映射类方法
- npm - 来自 CLI 的赛普拉斯运行测试
- php - 即使查询结果为空,PHP json循环也总是填充值
- amazon-web-services - 如何解决私有 API 网关的自定义域?
- python - Pandas:如何修改多条直方图中只有一个条的样式?
- php - 如果选项值“小于等于 (<=)”运算符与数据库“小于等于 (<=)”运算符匹配,则 PHP 获取选定选项
- flutter - 多次抖动不需要的刷新
- word2vec - 使用 SimLex-999 和 wordsim353 评估 word2vec
- gradle - 无法从本地的 jar 文件中找到 cordapp