public String runMachineStep() {
        Character readSymb;

        // On the first iteration
        if(curReadSymb == null) {
            curState = cmds.get(0).getCurState();
            readSymb = tape.get(0);
        }
        // On the following iterations
        else {
            readSymb = curReadSymb;
        }

        // True, if such command was found
        if(0 <= searchCommand(curState, readSymb)) {

            // assign that command to temporary variable
            Command tmpCurCmd = cmds.get(searchCommand(curState, readSymb));

            // assign a new symbol to the current cell according to command
            tape.set(idCurCell, tmpCurCmd.getNewSymb());

            // If tape's head needs to move left and index of the current cell is the start of the ArrayList
            // then need to increase our ArrayList to the left side
            if((tmpCurCmd.getMoveDirection() == -1) && (idCurCell == 0)) {
                tape.add(0, ' ');
            }
            // Else tape's head needs to move right and index of the current cell is the end of the ArrayList
            // then need to increase our ArrayList to the right side
            else if((tmpCurCmd.getMoveDirection() == 1) && (idCurCell == tape.size() - 1)) {
                tape.add(' ');
                idCurCell++;
            }
            // Otherwise
            else {
                if((tmpCurCmd.getMoveDirection() == -1)) {
                    idCurCell--;
                }
                else if((tmpCurCmd.getMoveDirection() == 1)) {
                    idCurCell++;
                }
                else {
                    // tape's head stays on the same cell (idCureCell doesn't change)
                }
            }

            curReadSymb = tape.get(idCurCell);
            curState = tmpCurCmd.getNextState();

        }
        else {
            // Command wasn't found
        }

        return tape.toString();
    }