File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Beginning Java and the fly likes Getting wrong answers for conversion Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

Win a copy of Java Interview Guide this week in the Jobs Discussion forum!
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Getting wrong answers for conversion" Watch "Getting wrong answers for conversion" New topic

Getting wrong answers for conversion

Alisha Burke

Joined: Jan 22, 2005
Posts: 27
Hi all,

I've been working on a program for base conversion.
After making some adjustments I am yet to get the "correct" answer for my conversion. For example when i key in 100 i get 10 as my answer.

I am using a label to set the text of my answer but all it does is take the number entered in the textfield i guess. Appreciate all replies.

I understand that my Compute method doesn't get called. How do i accomplish that?

[ February 09, 2005: Message edited by: Alisha Burke ]
Liam Tiarnach
Ranch Hand

Joined: Aug 06, 2004
Posts: 51
Hi Alisha...

Okay I took a look at it and made these changes to your compute method...

included are comment documenting the changes... basically we know that binary number are read right
to left, so we must start at the last element and work our way to the first. So as an example 1011 is
converted to a 4 element char array {'1','0','1','1'} with the index increasing from left to right.
And this is where a problem arises... If we use the array index to compute what power 2 is raised to
the first element ( left most ) will be 0 with the last in our example being 3. So whether we count up
or down the coversion will be wrong. So what we have to do is either reverse the array
( which would require even more code ) or simple reverse how we increase the power that 2 is raised by.
3-2-1-0 array index reading from right to left
1-1-0-1 element values reversed ( actual is 1011 = 11)
1-2-3-4 exponent values reading from right to left

the reason this was done in reverse is so that it follows how we would logically interpet a binary number...

Also what was done was that the String numberkeyin that get returned from you numberField.getText() method
is converted to a char array using the method java.lang.String.toCharArray() which all Strings are able to
utilize. Doing the binary conversion is much easier with a char array than using the charAt() method...
at least I think so...

Next... you mentioned that your Compute method does not get called...
So here is another snippet that I modified to show you how to call it from your action performed method...

here basically what was done was the call to Compute() was inserted before you updated your label.
A class can call it's own method just by calling it method name and parameters if any...

Simple example...

Anyway here is you entire class so that you can get a better idea of what was done...

Hope this helps...

- Liam...

- ' He who never sleeps... '

- Liam...<br />- ' He who never sleeps... '
Alisha Burke

Joined: Jan 22, 2005
Posts: 27
Hi Liam,

Thanks a lot! I was so worried i'd never get the answer for my binary to decimal conversion. Now I can start working on my octal base conversion. Just wondering is it necessary to create another for loop for my octal to decimal conversion.

And there is one part of the code that you gave me that i just can't quite grasp after a couple of times reading it. I would really appreciate it if you could explain it in the simplest manner as possible.

I am confused:

a) with the bits.length is that the length() method your using there?
b} how come its i-- and not i++

I understand that binary reads from right to left and we need to start off with the right most element. I just don't understand how the code above manage to accomplish that.
Liam Tiarnach
Ranch Hand

Joined: Aug 06, 2004
Posts: 51
Hi again ...

Okay, no problem... let's start off with the first question...

here we see the loop setup to run in reverse. So let break it down... ( you all ready know the for loop syntax, so I explain the code within...

we initilize int i to be bits.length which using a 4 element array as an example would return a length of 4, but arrays are 0 indexed, so the last element in that array would be 3, so we subtract 1 to correct it.

basically, once we reach 0, end the loop

each iteration decrements i by 1... a count down until it reaches 0 which ends the loop...

then we setup the loop so that is start with the right most element.

here i called "i" index for clarity...
next we check if the element is 1, if so then we add it binary value to our answer variable

so now we are almost at the end of the loop, before we go to the next element to the left, we need to increase our exponent value by 1

and the loop will count down until 0 is reached...
So using the example again using a 4 element array...
1-0-1-0 <- our char array representing a binary number 1010
0-1-2-3 <- our char array index values for each element in the char array
3-2-1-0 <- the exponent that we raise 2 by ( Math.pow(2.0,powers))

let step through it...
on the loops first run our index (index)starts at 3 (index = bits.length-1)
and our exponent (powers) is 0
at index 3, our binary number (bits[index]) is '0' so no math is done
answer current is 0
now that the check is done we increment our exponent (powers) by one (powers++)

on then second run of our loop, our index (index) is now 2 (index--)
and our exponent (powers) is now 1
at index 2, our binary number (bits[index]) is now '1' so we do the math (answer += Math.pow(2.0,powers)
answer is now 2
and all that done we increment our exponent (powers) by one again (powers++)

on the third run of out loop, you guessed it... index (index) is now 1 (index--)
our exponent (powers) is now 2
and at index 1, our binary number (bits[index]) is again '0' so no math
answer is still 2
and again we increment our exponent (powers) by one (powers++)

on the four and final run of our loop, index (index) is now 0 (index--)
our exponent (powers) has now reached 3
at index 0, our binary number (bits[index]) in '1' so we do the math (Math.pow(2.0,powers)
and answer is now 10 ( 2 + 8 )
although we still increment our exponent (powers) we no longer need it since our loop has ended...

Hopefully this helps...
[ February 09, 2005: Message edited by: Liam Tiarnach ]
Layne Lund
Ranch Hand

Joined: Dec 06, 2001
Posts: 3061
Often you use a for loop to count up from zero, but it doesn't have to. As described above, a for loop can just as easily count down. In this case, "i--" makes a lot of sense.


Java API Documentation
The Java Tutorial
Alisha Burke

Joined: Jan 22, 2005
Posts: 27
Thanks for the thourough explanation Liam... it sure cleared up a lot of my doubts.

*Smile with appreciation*
Liam Tiarnach
Ranch Hand

Joined: Aug 06, 2004
Posts: 51
You might want to take a look at this method...
I agree. Here's the link:
subject: Getting wrong answers for conversion
It's not a secret anymore!