程序输出中的间距错误
Spacing error in the output of the program
"编写一个程序打印 table 的值
(ln n), n, n *(ln n), n2, n3, and 2n for n = 16, 32, 64, ..., 2048。使用制表符('\t' 字符)排列列。”
这就是作业。但是,在使用 \t 时,输出的间距不正确。值之间的间距不均匀,一些值向右移动。我该如何解决这个问题?
public class Main {
public static void main(String[] args) {
for (int n = 16; n<2049; n*=2){
System.out.println(Math.log(n) +"\t"+ n + "\t"+ (Math.log(n)*n)+"\t"+Math.pow(n,2)+"\t"+Math.pow(n,3)+"\t"+Math.pow(2,n)+"\t");
}
}
}
做这样的事情:
System.out.print(format(n) + "\t");
System.out.print(format(Math.log(n)) + "\t");
System.out.print(format(Math.log(n)*n) + "\t");
并定义一个函数 'format' returns 一个字符串并在前面添加 n-input.length 个空格,以便每个输入的长度相同。
好的,制表符很好,但请记住,它们可能被制表符限制为 8 个空格,当我 运行 这段代码打印出比这更多的数字时,您的双打。链接的答案解释了如何将数字格式化为更少的位置。
Related Stack Overflow Question
我个人会使用带有格式字符串的 System.out.printf。
你可以玩这个格式字符串。请注意,我添加了空格以提高可读性——一旦您满意,您最终会想要删除它们。
public class Main {
public static void main(String[] args) {
for (int n = 16; n<2049; n*=2){
//System.out.println(Math.log(n) +"\t"+ n + "\t"+ (Math.log(n)*n)+"\t"+Math.pow(n,2)+"\t"+Math.pow(n,3)+"\t"+Math.pow(2,n)+"\t");
System.out.printf( "%12.5f\t %6d\t %12.5f\t %14.0f\t %14.0f\t %16.0f\n",
Math.log(n), n,
Math.log(n)*n,
Math.pow(n,2),
Math.pow(n,3),
Math.pow(2,n));
}
}
}
这并不完美,因为最后一列很快就变大了。但我最终得到这样的输出:
2.77259 16 44.36142 256 4096 65536
3.46574 32 110.90355 1024 32768 4294967296
4.15888 64 266.16852 4096 262144 18446744073709552000
4.85203 128 621.05987 16384 2097152 340282366920938460000000000000000000000
5.54518 256 1419.56543 65536 16777216 115792089237316200000000000000000000000000000000000000000000000000000000000000
6.23832 512 3194.02221 262144 134217728 13407807929942597000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
6.93147 1024 7097.82713 1048576 1073741824 Infinity
7.62462 2048 15615.21968 4194304 8589934592 Infinity
"编写一个程序打印 table 的值 (ln n), n, n *(ln n), n2, n3, and 2n for n = 16, 32, 64, ..., 2048。使用制表符('\t' 字符)排列列。”
这就是作业。但是,在使用 \t 时,输出的间距不正确。值之间的间距不均匀,一些值向右移动。我该如何解决这个问题?
public class Main {
public static void main(String[] args) {
for (int n = 16; n<2049; n*=2){
System.out.println(Math.log(n) +"\t"+ n + "\t"+ (Math.log(n)*n)+"\t"+Math.pow(n,2)+"\t"+Math.pow(n,3)+"\t"+Math.pow(2,n)+"\t");
}
}
}
做这样的事情:
System.out.print(format(n) + "\t");
System.out.print(format(Math.log(n)) + "\t");
System.out.print(format(Math.log(n)*n) + "\t");
并定义一个函数 'format' returns 一个字符串并在前面添加 n-input.length 个空格,以便每个输入的长度相同。
好的,制表符很好,但请记住,它们可能被制表符限制为 8 个空格,当我 运行 这段代码打印出比这更多的数字时,您的双打。链接的答案解释了如何将数字格式化为更少的位置。
Related Stack Overflow Question
我个人会使用带有格式字符串的 System.out.printf。
你可以玩这个格式字符串。请注意,我添加了空格以提高可读性——一旦您满意,您最终会想要删除它们。
public class Main {
public static void main(String[] args) {
for (int n = 16; n<2049; n*=2){
//System.out.println(Math.log(n) +"\t"+ n + "\t"+ (Math.log(n)*n)+"\t"+Math.pow(n,2)+"\t"+Math.pow(n,3)+"\t"+Math.pow(2,n)+"\t");
System.out.printf( "%12.5f\t %6d\t %12.5f\t %14.0f\t %14.0f\t %16.0f\n",
Math.log(n), n,
Math.log(n)*n,
Math.pow(n,2),
Math.pow(n,3),
Math.pow(2,n));
}
}
}
这并不完美,因为最后一列很快就变大了。但我最终得到这样的输出:
2.77259 16 44.36142 256 4096 65536
3.46574 32 110.90355 1024 32768 4294967296
4.15888 64 266.16852 4096 262144 18446744073709552000
4.85203 128 621.05987 16384 2097152 340282366920938460000000000000000000000
5.54518 256 1419.56543 65536 16777216 115792089237316200000000000000000000000000000000000000000000000000000000000000
6.23832 512 3194.02221 262144 134217728 13407807929942597000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
6.93147 1024 7097.82713 1048576 1073741824 Infinity
7.62462 2048 15615.21968 4194304 8589934592 Infinity