Не удается отправить JSON-ответ на запрос POST в Spring MVC-контроллере

В вашем коде есть две ошибки.

См. комментарий от Mick для первой ошибки:

Одна очевидная проблема в dfsIsland() по крайней мере, это for (int col = 0; col < cols; cols++), вероятно, будет for (int col = 0; col < cols; col++) вместо этого (возможно, даже лучше использовать общие i и j для индексов строки / столбца.)

Вторая ошибка ваше использование count в методе mark, наиболее убедительно отсутствие использования возвращаемого значения в рекурсивном вызове. Помните, что Java передается по значению. Подсказка: Я предлагаю вам удалить count в качестве параметра.

После исправления ошибок вывод будет:

[7, 2, 2]


public class IslandConnectedCell {

    public static void main(String... args) {
        int[][] board = { {1,0,0,0,1},
                          {1,1,1,1,1},
                          {0,0,0,0,0},
                          {1,1,0,1,1} };
        System.out.println(new IslandConnectedCell(board).getIslandSizes());
    }

    private final int[][] board;
    private final int rows;
    private final int cols;

    public IslandConnectedCell(int[][] board) {
        this.board = board;
        this.rows = board.length;
        this.cols = board[0].length;
    }

    public List getIslandSizes() {
        boolean visited[][] = new boolean[this.rows][this.cols];
        List countList = new ArrayList<>();
        for (int row = 0; row < this.rows; row++)
            for (int col = 0; col < this.cols; col++)
                if (this.board[row][col] == 1 && ! visited[row][col])
                    countList.add(mark(row, col, visited));
        return countList;
    }

    private int mark(int row, int col, boolean[][] visited) {
        if (row >= this.rows || row < 0 || col >= this.cols || col < 0 || this.board[row][col] == 0 || visited[row][col])
            return 0;
        visited[row][col] = true;
        int count = 1;
        for (int r = -1; r <= 1; r++)
            for (int c = -1; c <= 1; c++)
                if (r != 0 || c != 0)
                    count += mark(row + r, col + c, visited);
        return count;
    }

}

UPDATE

Чтобы получить желаемый результат [7, 4] ( исходный вопрос ), плате необходимо будет использовать горизонтальное обертывание , поэтому два небольших острова на нижней линии становятся одним большим островом.

Это легко осуществить, изменив одну строку кода, чтобы обернуть индекс столбца с помощью модуля модуля %:

count += mark(row + r, (col + c + this.cols) % this.cols, visited);

0
задан AlexeiP 18 January 2019 в 19:24
поделиться

1 ответ

Оказывается, я отправлял запрос POST с телом json на контроллер, сопоставленный с URL с суффиксом 'htm'. Этот запрос вызывает конфликт с отображением mime 'text / html', и в результате сервер немедленно отвечает кодом 406.

0
ответ дан AlexeiP 18 January 2019 в 19:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: