Binary array to base 10 conversion returns wrong value

  • Context: Java 
  • Thread starter Thread starter courtrigrad
  • Start date Start date
  • Tags Tags
    Java Program
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
5 replies · 5K views
courtrigrad
Messages
1,236
Reaction score
2
Hello all:

I need to write a program that takes an array of 0's and 1's and converts them into base 10 numbers. Here is my code, but I can't get it to return the correct base 10 number.

Code:
 /*  This program returns a value in base 10 from an array of binary numbers.
 * 
 */


public class binary
{
    public int convertBaseTen( int [] a) // method takes an array
{
    int numValue=1;
    int sum=0;
    for(int i = 0; i< a.length; i++)   // loop through array a
    {
    if (a[i]==1)
     {
        sum+=numValue;
     }
        numValue*=2;
    }   
       return numValue;
}
    }

Any help is appreciated.

Thanks!
 
Physics news on Phys.org
dont just multiply the number in the array by 2, multiply it by 2^i
i being the integer varibale you are using in the loop to go through the array, because with eah successive element in the array, you are increasing by a power of 2.

for example if you have a number of let's say...5
5 = 101 in binary

101 = (1*2^0) + (0*2^4) + (1*2^2) = 5

if you loop through the array from lowest power of 2 to highest power of 2, and multiply the element by 2^i, and then keep a running total of all that, then you should get the correct answer.
 
Shouldn't you return sum
 
Code:
  /*  This program returns a value in base 10 from an array of binary numbers.
 * 
 */


public class binary
{
    public int convertBaseTen( int [] a) // method takes an array
{
    int numValue=1;
    int sum=0;
    for(int i = 0; i< a.length; i++)   // loop through array a
    {
    if (a[i]==1)
     {
        sum+=numValue;
     }
        numValue*=2;
    }   
       return numValue;
}
    }

How would I write this program which takes in a boolean where true = 1, and false = 0?

Example:

{true, true, false, true} = [1,1,0,1] and then convert this into base 10? Should I use math.pow?

Thanks
 
1st, return sum, not numValue.

Also, for a boolean array, your if statement would be if(a).

Another thing, is {1,1,0,1} representing 1101 or 1011? (Binary). If it's the second option, changing the return value to sum should be all that needs fixing. If not, you should start at a.length - 1 and go down to (and including) 0 at the array. Then it will calculate the last value and go to the first. In {1,1,0,1} would start at the last 1.

Hope that helped!