Проблема с итерацией массива Nd с отражением в Java - PullRequest
1 голос
/ 10 июня 2019

Хорошо, поэтому я хочу напечатать все элементы в случайном N-мерном массиве с помощью отражения.Решение прекрасно работает, за исключением того, что у меня есть N-1 пустых массивов в конце строки arraysString.Например:

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();
}

1 Ответ

1 голос
/ 10 июня 2019

Для ввода двумерного массива, когда возвращаются рекурсивные вызовы, вы добавляете строку [] к выводу 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"]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...