?
Solved

Swapping 0 and 1s in an array

Posted on 2004-09-28
10
Medium Priority
?
271 Views
Last Modified: 2010-03-31
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
0
Comment
Question by:NeedlessKane
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 3
  • 2
10 Comments
 
LVL 92

Accepted Solution

by:
objects earned 200 total points
ID: 12175000
try it in one loop:

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

       if (swapArray[k] == 0)
       {
             swapArray[k] = 1;
       }
       else
       {
             swapArray[k] = 0;
       }              
}
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 12175001
That's OK in principle, but why break?
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 12175015
for (k=0; k < swapArray.length; k++)
{
      swapArray[k] ^= 1;
}
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 

Author Comment

by:NeedlessKane
ID: 12175099
Ok, Object thanks. lol I can't believe i didn't do that, wow. So easy.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 12175132
The code i posted is not only more efficient on your processor, but more efficient on your wrists ;-)
0
 
LVL 92

Expert Comment

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

Author Comment

by:NeedlessKane
ID: 12175170
CEHJ: i tried yours, it's not working for me.  What does the ^= operator do?
0
 
LVL 92

Expert Comment

by:objects
ID: 12175210
> 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
 
LVL 86

Expert Comment

by:CEHJ
ID: 12175214
>>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
 
LVL 86

Expert Comment

by:CEHJ
ID: 12175289
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

Featured Post

Want to be a Web Developer? Get Certified Today!

Enroll in the Certified Web Development Professional course package to learn HTML, Javascript, and PHP. Build a solid foundation to work toward your dream job!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
Viewers learn about the third conditional statement “else if” and use it in an example program. Then additional information about conditional statements is provided, covering the topic thoroughly. Viewers learn about the third conditional statement …
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:
Suggested Courses
Course of the Month8 days, 19 hours left to enroll

764 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question