Доброго дня. При решении задачи возникла проблема с непринятием mergeTiles. Проверял на наборах данных из задачи и собственных, всё корректно отрабатывало. Задача: 2048 (5) Основными возможностями, которые мы должны реализовать, являются перемещения влево, вправо, вверх и вниз. Если ты раньше уже играл в 2048, то знаешь, что при перемещении в одну из сторон, происходит перемещение плиток со значениями на место пустых, а также объединение плиток одного номинала. В качестве базового сценария рассмотрим движение влево и подумаем что же происходит, когда мы хотим выполнить это действие. Для каждого ряда или столбца, происходят на самом деле две вещи: а) Сжатие плиток, таким образом, чтобы все пустые плитки были справа, т.е. ряд {4, 2, 0, 4} становится рядом {4, 2, 4, 0} б) Слияние плиток одного номинала, т.е. ряд {4, 4, 2, 0} становится рядом {8, 2, 0, 0}. Обрати внимание, что ряд {4, 4, 4, 4} превратится в {8, 8, 0, 0}, а {4, 4, 4, 0} в {8, 4, 0, 0}. Создай методы compressTiles(Tile[] tiles) и mergeTiles(Tile[] tiles), которые будут реализовывать пункты а) и б) соответственно. Использовать мы их будем только внутри класса Model, поэтому уровень доступа сделай максимально узким. Также добавь поля score и maxTile типа int, которые должны хранить текущий счет и максимальный вес плитки на игровом поле. Счет увеличивается после каждого слияния, например если текущий счет 20 и было выполнено слияние ряда {4, 4, 4, 0}, счет должен увеличиться на 8. Уровень доступа к полям должен быть шире приватного. Проще всего организовать обновление значений этих полей в методе mergeTiles, например так: 1. Если выполняется условие слияния плиток, проверяем является ли новое значения больше максимального и при необходимости меняем значение поля maxTile. 2. Увеличиваем значение поля score на величину веса плитки образовавшейся в результате слияния. P.S. Когда мы будем реализовывать методы движения, сжатие будет всегда выполнено перед слиянием, таким образом можешь считать, что в метод mergeTiles всегда передается массив плиток без пустых в середине. Требования: 1. Метод mergeTiles должен быть реализован в соответствии с условием задачи. 2. Метод compressTiles должен быть реализован в соответствии с условием задачи. 3. Метод compressTiles должен быть приватным. 4. Метод mergeTiles должен быть приватным. 5. Метод mergeTiles должен корректно обновлять значение поля score. 6. Метод mergeTiles должен корректно обновлять значение поля maxTile. 7. Поля score и maxTile должны быть инициализированы как 0 и 2 при создании новой модели. Результаты проверки: Код:
package com.javarush.task.task35.task3513;

import java.util.ArrayList;
import java.util.List;

public class Model {
    private static final int FIELD_WIDTH = 4;
    private Tile[][] gameTiles;
    protected int score = 0;
    protected int maxTile = 2;

    public Model() {
        resetGameTiles();
    }

    public void resetGameTiles() {
        gameTiles = new Tile[FIELD_WIDTH][FIELD_WIDTH];

        for (int i = 0; i < gameTiles.length; i++) {
            for (int j = 0; j < gameTiles[i].length; j++) {
                gameTiles[i][j] = new Tile();
            }
        }

        addTile();
        addTile();
    }

    public void addTile() {
        List<Tile> emptyTiles = getEmptyTiles();

        int index = (int)(Math.random() * emptyTiles.size());

        emptyTiles.get(index).value = Math.random() < 0.9 ? 2 : 4;
    }

    public List<Tile> getEmptyTiles() {
        List<Tile> results = new ArrayList<>();

        for (int i = 0; i < gameTiles.length; i++) {
            for (int j = 0; j < gameTiles[i].length; j++) {
                if (gameTiles[i][j].isEmpty()) {
                    results.add(gameTiles[i][j]);
                }
            }
        }

        return results;
    }

    private void compressTiles(Tile[] tiles) {
        int blankPosition = -1;

        for (int i = 0; i < tiles.length; i++) {
            if (tiles[i].isEmpty() && blankPosition == -1) {
                blankPosition = i;
                continue;
            }

            if (!tiles[i].isEmpty() && blankPosition != - 1) {
                tiles[blankPosition].value = tiles[i].value;
                tiles[i].value = 0;
                blankPosition = i;
            }
        }
    }

    private void mergeTiles(Tile[] tiles) {
        for (int i = 1; i < tiles.length; i++) {
            if (tiles[i - 1].value != 0 && tiles[i].value != 0) {
                int inc = tiles[i - 1].value + tiles[i].value;

                maxTile = Math.max(inc, maxTile);

                score += inc;

                tiles[i - 1].value = tiles[i - 1].value + tiles[i].value;
                tiles[i].value = 0;
                compressTiles(tiles);
            }
        }
    }
}
Что тут не так?