Saturday, August 20, 2011

Using an integer to implement a binary toggle switch in Java

We were talking about a way to use an integer to indicate teh state of a series of switches.  e.g. if there were 5 switches and the first 3 were on we would say think of that as 11100, or 28

Not a bad method -- you can very quickly toggle switches on and off by calling

toggle(boolean on,int position)

and you can quickly check it the toggle at a position is on by calling

toggleIsOn(int position);

The code snippet is below, comments welcome.  you have to declare toggleState yourself of course...;



public int toggleState=0;

       /**
     * if onOff==true we set the value at pos == 1 aka on
     * else we set it to 0;
     * @param onOff
     * @param pos
     */
    public void toggle(boolean onOff, int pos){
        if(toggleState==null){
            toggleState=0;
        }
        if(onOff==true){
            if(toggleIsOn(pos)){
                //do nothing, already on
            }
            else{
                //we want it on, and it is currently off
                toggleState+=2^pos;
            }
        }
        else{
            if(toggleIsOn(pos)){
                //It's on, and we want it off
                toggleState-=2^pos;
            }
            else{
                //it's off and we want it off -- do nothing
            }            
        }
    }
    
    public boolean toggleIsOn(int pos){
        if(toggleState==null || toggleState < (2^pos)) return false;
        //divide toggle state
        int multiple=toggleState/(2^pos);
                //if the switch is on, multiple will be an odd number, otherwise it will be even.
        return multiple%2==1;
    }

1 comment:

Dan said...

This was just pseudocode --

2 ^ pos is not how to do wexpojnents in java. Instead you should do Math.pow(2,pos);