如何格式化多表的列间距?

  • 本文关键字:格式化 java multi-table
  • 更新时间 :
  • 英文 :


我目前正在尝试使用 java 制作具有以下输出的多表:

0  1  2  3  4  5  6  7  8  9
+------------------------------
0|  0  0  0  0  0  0  0  0  0  0
1|  0  1  2  3  4  5  6  7  8  9
2|  0  2  4  6  8 10 12 14 16 18
3|  0  3  6  9 12 15 18 21 24 27
4|  0  4  8 12 16 20 24 28 32 36
5|  0  5 10 15 20 25 30 35 40 45
6|  0  6 12 18 24 30 36 42 48 54
7|  0  7 14 21 28 35 42 49 56 63
8|  0  8 16 24 32 40 48 56 64 72
9|  0  9 18 27 36 45 54 63 72 81

但是,我得到的不是上面的结果:

0   1   2   3   4   5   6   7   8   9
+-------------------------------------------
0| 0  0  0  0  0  0  0  0  0  0
1| 0  1  2  3  4  5  6  7  8  9
2| 0  2  4  6  8  10  12  14  16  18
3| 0  3  6  9  12  15  18  21  24  27
4| 0  4  8  12  16  20  24  28  32  36
5| 0  5  10  15  20  25  30  35  40  45
6| 0  6  12  18  24  30  36  42  48  54
7| 0  7  14  21  28  35  42  49  56  63
8| 0  8  16  24  32  40  48  56  64  72
9| 0  9  18  27  36  45  54  63  72  81

因此,我想知道有什么方法可以解决问题吗? 谢谢。

这是代码。

import java.util.*;
public class MultiTable 
{
public static void main(String[] args) 
{
int x = 9;
System.out.print("   ");
for(int k = 0; k<=x ;k++ ) {
System.out.print( k + "   ");
}
System.out.println("n +-------------------------------------------");
for(int i = 0 ;i<=x ;i++) {
System.out.print(i+ "| ");
for(int j=0;j<=x ;j++) {
System.out.print(j*i + "  ");
}
System.out.println();
}
System.out.println("n"); 
System.out.println("nn");
}
}

谢谢。

打印格式化的字符串,而不是按原样打印。

您可以使用System.out.printf()将格式化的字符串直接打印到输出

您可以先使用String.format()格式化字符串,然后使用println打印它。

在这种情况下,您需要强制整数长度至少为 2 个字符。如果整数的位数太少,则可以将其填充在空格中。这是你可以做到的:

int number = 1;
// printf approach
System.out.printf("%3d", number);
// Formatted string approach
String formatted = String.format("%3d", number);
System.out.print(formatted);

在格式中,您可以看到%3d.这意味着:

  • %开始格式化
  • 3右对齐,3 个空格(负数将左对齐(。我使用 3,这样数字就不会粘在一起。
  • d将格式化十进制(以 10 为基数的整数(

您可以在 Java 的官方文档中阅读有关格式化程序的更多信息

您可以按如下方式更新代码以获得所需的输出。更改如下:

1(第一System.out.println应该有额外的空间。
2(更改逻辑以在数字之前打印空格,而不是在数字之后打印空格以决定它没有空格。
2(在内部for循环内添加if条件,以决定空格的数量,取决于其后相应数字的长度。

import java.util.*;
public class MultiTable 
{
public static void main(String[] args) 
{
public static void main(final String[] args) {
final int x = 9;
System.out.print("    ");
for (int k = 0; k <= x; k++) {
System.out.print(k + "  ");
}
System.out.println("n +------------------------------");
for (int i = 0; i <= x; i++) {
System.out.print(i + "|");
for (int j = 0; j <= x; j++) {
if (String.valueOf(j * i).length() == 1) {
System.out.print("  " + j * i);
} else {
System.out.print(" " + j * i);
}
}
System.out.println();
}
System.out.println("n");
System.out.println("nn");
}
}

代码输出:

0  1  2  3  4  5  6  7  8  9  
+------------------------------
0|  0  0  0  0  0  0  0  0  0  0
1|  0  1  2  3  4  5  6  7  8  9
2|  0  2  4  6  8 10 12 14 16 18
3|  0  3  6  9 12 15 18 21 24 27
4|  0  4  8 12 16 20 24 28 32 36
5|  0  5 10 15 20 25 30 35 40 45
6|  0  6 12 18 24 30 36 42 48 54
7|  0  7 14 21 28 35 42 49 56 63
8|  0  8 16 24 32 40 48 56 64 72
9|  0  9 18 27 36 45 54 63 72 81

您可以为一位数添加空格,但仅当您的最大数字为两位数时,它才有效。要解决此问题,您应该计算最大数字的长度,并用空格调整其他数字的长度。

for(int j=0;j<=x ;j++) {
String resStr0 = Integer.valueOf(j*i).toString();
String resStr = resStr0.length() < 2 ? resStr0+" " : resStr0;
System.out.print(resStr + "  ");
}
0   1   2   3   4   5   6   7   8   9   
+-------------------------------------------
0| 0   0   0   0   0   0   0   0   0   0   
1| 0   1   2   3   4   5   6   7   8   9   
2| 0   2   4   6   8   10  12  14  16  18  
3| 0   3   6   9   12  15  18  21  24  27  
4| 0   4   8   12  16  20  24  28  32  36  
5| 0   5   10  15  20  25  30  35  40  45  
6| 0   6   12  18  24  30  36  42  48  54  
7| 0   7   14  21  28  35  42  49  56  63  
8| 0   8   16  24  32  40  48  56  64  72  
9| 0   9   18  27  36  45  54  63  72  81  
  1. 数字控制其左侧的空格填充(与代码相反,代码在右侧添加填充(

  2. 如果数字是两位数,则用一个空格填充,否则用两个空格填充

    for(int i = 0 ;i<=x ;i++) {
    System.out.print(i+ "|");  // leave padding to the number printing loop
    for(int j = 0 ; j <= x ; j++) {
    int numbertoPrint = j*i;
    int spacePadding = j == 0 || numbertoPrint >= 10 ? 1 : 2;  // one space at the beginning or if two digit number
    System.out.print(" ".repeat(spacePadding) + numbertoPrint);  // repeat() available since java 11
    }
    System.out.println();
    }
    

相关内容

  • 没有找到相关文章

最新更新