使用行间距格式化乘法表

时间:2017-05-20 23:07:13

标签: java

我试图制作一个与用户指定一样大的乘法表。我遇到的问题是格式。输出现在将所有数字打印到一行,而我希望它在一个漂亮整洁的表上的多行上。按照原样格式化,我无法告诉\n将会这样做,或者是否有其他方式。

这是我的代码:

import java.util.*;

public class question2 {

  public static void main(String []  args) {

    Scanner keyb = new Scanner(System.in);

    int i = 0;

    while (i<=0 || i>=11) {
       System.out.print("please enter an integer between 1 and 10: ");
       i = keyb.nextInt();
    }

    for (int x = 1; x <= i; x++) {
       System.out.printf("%4d",x);
       for (int y = 1; y <= i; y++){
          System.out.printf("%4d",x*y);
       }
    }
  }
}

修改 整数5的输出打印如下:

1 1 2 3 4 5 2 2 4 6 8 10 3 3 6 9 12 15 4 4 8 12 16 20 5 5 10 15 20 25

2 个答案:

答案 0 :(得分:2)

在第二个for循环之后,添加一个新行\n

for (int x = 1; x <= i; x++) {
    System.out.printf("%4d",x);
    for (int y = 1; y <= i; y++){
        System.out.printf("%4d",x*y);
    }
    System.out.println();
}

答案 1 :(得分:0)

您应该在第二个for循环后添加换行符,并且因为您打印x,所以不要打印x * 1。所以,

for (int x = 1; x <= i; x++) {
    System.out.printf("%4d", x);
    for (int y = 2; y <= i; y++) {
        System.out.printf("%4d", x * y);
    }
    System.out.println();
}

你可以删除第一个印刷品,

for (int x = 1; x <= i; x++) {
    for (int y = 1; y <= i; y++) {
        System.out.printf("%-4d", x * y); // and simply for variety, left-aligned
    }
    System.out.println();
}

如果您使用的是Java 8+,可以使用IntStream之类的

IntStream.rangeClosed(1, i).forEachOrdered(x -> {
    IntStream.rangeClosed(1, i).forEachOrdered(y -> System.out.printf(
                "%-4d", x * y));
    System.out.println();
});