Swapping 0 and 1s in an array

Hello,

For this assignment i'm doing for class(an interative towers of hanoi), I have an array that will contain 0 and 1s that correspond to the number of the disk that is to be moved. And my question is this:

That array, will initially be intitialized to all 1s, and then it needs to swap all 0s to 1s, and all 1s to 0s, but I can't figure out how to do it. I wrote a method but it just undoes work that it's already done, thus giving me what i start with.

here it is:
public static void  bitSwap(int[] swapArray)
{

for (k=0; k < swapArray.length; k++)
{

       if (swapArray[k] == 0)
              {
                    swapArray[k] = 1;
                    break;
               }
                  
}


for (j=0; j < swapArray.length; j++)
{      
            
            if  (swapArray[j] == 1)
               {      

      swapArray[j] = 0;
      break;
      
                }      


}      
}

As you can see, that does undoes itself.  I know it's EASY but i can't figure it out, any help would be appreciated.

-NeedlessKane
NeedlessKaneAsked:
Who is Participating?
 
objectsConnect With a Mentor Commented:
try it in one loop:

for (k=0; k < swapArray.length; k++)
{

       if (swapArray[k] == 0)
       {
             swapArray[k] = 1;
       }
       else
       {
             swapArray[k] = 0;
       }              
}
0
 
CEHJCommented:
That's OK in principle, but why break?
0
 
CEHJCommented:
for (k=0; k < swapArray.length; k++)
{
      swapArray[k] ^= 1;
}
0
Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

 
NeedlessKaneAuthor Commented:
Ok, Object thanks. lol I can't believe i didn't do that, wow. So easy.
0
 
CEHJCommented:
The code i posted is not only more efficient on your processor, but more efficient on your wrists ;-)
0
 
objectsCommented:
No worries, glad I could help :)
Let me know if you have any further questions.
0
 
NeedlessKaneAuthor Commented:
CEHJ: i tried yours, it's not working for me.  What does the ^= operator do?
0
 
objectsCommented:
> i tried yours, it's not working for me.

So much for effiency on your wrist and processor :-D

> What does the ^= operator do?

Not whats required here ;)
0
 
CEHJCommented:
>>CEHJ: i tried yours, it's not working for me.  

Why not?

>>What does the ^= operator do?

Performs a bitwise operation on the number to turn 1s into 0s and 0s into 1s
0
 
CEHJCommented:
My code works perfectly well, as the following shows:

            int[] swapArray = new int[10];
            for (int k=0; k < swapArray.length; k++) {
                  swapArray[k] = Math.random() > 0.5? 1: 0;
            }

            // Before
            System.out.println(MyArrays.toString(swapArray));
            for (int k=0; k < swapArray.length; k++)
            {
                        swapArray[k] ^= 1;
            }
            // After
            System.out.println(MyArrays.toString(swapArray));


      ....
      

                  static class MyArrays {
                        public static String toString(int[] array) {
                              StringBuffer sb = new StringBuffer();
                              sb.append("[");
                              for (int k=0; k < array.length - 1; k++) {
                                    sb.append(array[k]).append(", ");
                              }
                              sb.append(array[array.length - 1]).append("]");
                              return sb.toString();
                        }
                  }



Producing when i ran it:

[0, 1, 1, 0, 0, 0, 1, 0, 0, 1]
[1, 0, 0, 1, 1, 1, 0, 1, 1, 0]
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.