Link to home
Start Free TrialLog in
Avatar of dirtydinny
dirtydinny

asked on

Length

hey,

i'ver develop a programme using a while and for loop to diplay in a table the results of 2^n where 1<=n<64.

However i don't know how to modify the loop to limit the resuts to 10 digits. Also i wish to right align the numbers displayed in the n column.

If anyone knows how to do this, please let me know. If ye want to jazz up the presentation too fire away! thanks!

Here is my code:

/*Computes 2^n where 1<=n<64 and displays in a table*/

class Numbers
{
      public static void main(String[] args)
      {
            byte n = 1;      //declare n, the power, as a byte. initialised at 1 and will not excced 64
            double answer;      //solution of 2^n

            System.out.println("n \t2^n"); //print header of table output

            while (n<64) //iterate loop while n is less than 64
            {
                  answer = Math.pow(2,n); // set answer to 2^n
                  System.out.println(n + "\t" + answer); //print answer
                  n++; //increment n by 1
            } // end of while loop
            

            /*for (n=1; n<64; n++)
            {
                  answer = Math.pow(2,n); // set answer to 2^n
                  System.out.println(n + "\t" + answer); //print answer
                  n=n++; //increment n by 1
            }//end of for loop*/

            
      }//end of main
}//end of class



Thanks as ever

Dinny
ASKER CERTIFIED SOLUTION
Avatar of TimYates
TimYates
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Hope this is sort of what you wanted...

btw, the DecimalFormat bit limits it to 10 decimal places, and the while loop pads the strings out to a max of 15 chars :-)

Tim
You'll get better output with a BigInteger:

import java.text.* ;
import java.math.BigInteger;

class Numbers
{
      public static void main( String[] args )
      {
            BigInteger bi = new BigInteger("2");
            System.out.println( "n \t\t\t2^n" ) ; //print header of table output
            System.out.println("---------------------------");
            for(int i = 1;i < 64;i++) {
                  String current = bi.pow(i).toString();
                  while(current.length() < 19)
                        current = " " + current;
                  System.out.println(i + "\t" + current);

            }
      } //end of main
} //end of class
you and your BigIntegers ;-)
Yes, maybe i should create a subclass called 'BigPal' - i'm surprised it isn't final
Ooooh...me too >_<
long answer = 0;
for (byte n=1; n<64 && (answer=(long) Math.pow(2, n))<10000000000L; n++)
{
This'll right align your numbers:

StringBuffer out = new StringBuffer();
out.setLength(10 - s.length());
out.append(s);

I'd also suggest not using tabs to align your table and instead add the number of spaces you require.
public static void main(String[] args)
{
   long answer = 0;
   for (byte n=1; n<64 && (answer=(long) Math.pow(2, n))<10000000000L; n++)
   {
      rightAlignValue(n, 2);
      rightAlignValue(answer, 15);
      System.out.println();
   }
}
      
private static void rightAlignValue(long value, int len)
{
   String s = Long.toString(value);
   StringBuffer out = new StringBuffer();
   out.setLength(len - s.length());
   out.append(s);
   System.out.print(out);
}