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
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
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
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
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++)
{
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.
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);
}
{
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);
}
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