程序输出中的间距错误

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