# 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
###### Who is Participating?

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

Commented:
That's OK in principle, but why break?
0

Commented:
for (k=0; k < swapArray.length; k++)
{
swapArray[k] ^= 1;
}
0

Author Commented:
Ok, Object thanks. lol I can't believe i didn't do that, wow. So easy.
0

Commented:
The code i posted is not only more efficient on your processor, but more efficient on your wrists ;-)
0

Commented:
No worries, glad I could help :)
Let me know if you have any further questions.
0

Author Commented:
CEHJ: i tried yours, it's not working for me.  What does the ^= operator do?
0

Commented:
> 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

Commented:
>>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

Commented:
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.