public class Barcode
{
    public static final char FRONT = 'F';
    public static final char BACK = 'B';
    public static final char LEFT = 'L';
    public static final char RIGHT = 'R';

    public Barcode (String entry, boolean debug)
    {
        _data = entry;
        _theSeat = null;
        _debug = debug;
    }

    public final Seat getSeat ()
    {
        if (_theSeat == null)
        {
            int startRow = 1;
            int endRow = 128;
            int startColumn = 1;
            int endColumn = 8;

            for (int i = 0; i < _data.length(); i++)
            {
                switch (_data.charAt(i))
                {
                    case FRONT:
                    {
                        // F means to take the lower half

                        int size = endRow - startRow;

                        endRow = startRow - (size / 2);
                    }
                    break;
                    case BACK:
                    {
                        // B means to take the upper half

                        int size = endRow - startRow;

                        startRow = startRow + (size / 2);
                    }
                    break;
                    case LEFT:
                    {
                        // L means to keep the lower half

                        int size = endColumn - startColumn;

                        startColumn = startColumn + (size / 2);
                    }
                    break;
                    case RIGHT:
                    {
                        // R means to keep the upper half

                        int size = endColumn - startColumn;

                        endColumn = endColumn - (size / 2);
                    }
                    break;
                    default:
                    {
                        System.out.println("Unrecognised barcode character: "+_data.charAt(i));
                    }
                    break;
                }
            }

            _theSeat = new Seat(startRow, startColumn);
        }

        return _theSeat;
    }

    private String _data;
    private Seat _theSeat;
    private boolean _debug;
}
@@ -789,934 +789,2002 @@
    i
-nt size = endRow - startRow;%0A%0A                        endRow = startRow - (size / 2);%0A                    %7D%0A                    break;%0A                    case BACK:%0A                    %7B%0A                        // B means to take the upper half%0A%0A                        int size = endRow - startRow;%0A%0A                        startRow = startRow + (size / 2);%0A                    %7D%0A                    break;%0A                    case LEFT:%0A                    %7B%0A                        // L means to keep the lower half%0A%0A                        int size = endColumn - startColumn;%0A%0A                        startColumn = startColumn + (size / 2);%0A                    %7D%0A                    break;%0A                    case RIGHT:%0A                    %7B%0A                        // R means to keep the upper half%0A%0A                        int size = endColumn - startColumn;%0A%0A                        endColumn = endColumn - (size / 2
+f (_debug)%0A                            System.out.println(%22Front currently: %3C %22+startRow+%22, %22+endRow+%22 %3E%22);%0A%0A                        int size = endRow - startRow;%0A%0A                        endRow = startRow - (size / 2);%0A%0A                        if (_debug)%0A                            System.out.println(%22Front now: %3C %22+startRow+%22, %22+endRow+%22 %3E%22);%0A                    %7D%0A                    break;%0A                    case BACK:%0A                    %7B%0A                        // B means to take the upper half%0A%0A                        if (_debug)%0A                            System.out.println(%22Back currently: %3C %22+startRow+%22, %22+endRow+%22 %3E%22);%0A%0A                        int size = endRow - startRow;%0A%0A                        startRow = startRow + (size / 2);%0A%0A                        if (_debug)%0A                            System.out.println(%22Back now: %3C %22+startRow+%22, %22+endRow+%22 %3E%22);%0A                    %7D%0A                    break;%0A                    case LEFT:%0A                    %7B%0A                        // L means to keep the lower half%0A%0A                        if (_debug)%0A                            System.out.println(%22Left currently: %3C %22+startColumn+%22, %22+endColumn+%22 %3E%22);%0A%0A                        int size = endColumn - startColumn;%0A%0A                        startColumn = startColumn + (size / 2);%0A%0A                        if (_debug)%0A                            System.out.println(%22Left now: %3C %22+startColumn+%22, %22+endColumn+%22 %3E%22);%0A                    %7D%0A                    break;%0A                    case RIGHT:%0A                    %7B%0A                        // R means to keep the upper half%0A%0A                        if (_debug)%0A                            System.out.println(%22Right currently: %3C %22+startColumn+%22, %22+endColumn+%22 %3E%22);%0A%0A                        int size = endColumn - startColumn;%0A%0A                        endColumn = endColumn - (size / 2);%0A%0A                        if (_debug)%0A                            System.out.println(%22Right now: %3C %22+startColumn+%22, %22+endColumn+%22 %3E%22
 );%0A 

Update Barcode.java