我试图制作一个与用户指定一样大的乘法表。我遇到的问题是格式。输出现在将所有数字打印到一行,而我希望它在一个漂亮整洁的表上的多行上。按照原样格式化,我无法告诉\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
答案 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();
});