My code is a loop, the mentor's solution is calling manually as needed. Am I doing something wrong? Please ignore the break in moveUp method, I was testing something
private void moveLeft(){
    boolean isNumberNeeded = false;
    for (int[] row : gameField) {
        boolean compress = compressRow(row);
        boolean merge = mergeRow(row);
        if (merge) compressRow(row);
        if (compress || merge) isNumberNeeded = true;
    }
    if (isNumberNeeded) createNewNumber();
}

private void moveRight(){
    for (int i = 0; i < 5; i++){
        if (i == 2) {
            moveLeft();
            continue;
        }
        rotateClockwise();
    }
}

private void moveUp(){
    for (int i = 0; i < 5; i++){
        if (i == 3) {
            moveLeft();
            break;
        }
        rotateClockwise();
    }
}

private void moveDown(){
    for (int i = 0; i < 5; i++){
        if (i == 1) {
            moveLeft();
            continue;
        }
        rotateClockwise();
    }
}