2

我知道如何格式化单个变量,但我不知道如何使用printf(). 我想显示我的程序,每个数字垂直排列,每行上的每个数字都有相同数量的空格。以下是我对不同数字的含义的示例:

1.1   2.2   3.3   4.4   5.5
1     2     3     4     5

这是我尝试显示数字的代码:

 // create array
 String[] tempsArray2 = temps2.toArray(new String[0]);

 // for-each loop
 for(String ss : tempsArray2){

     // display ss to make sure program works correctly
     System.out.printf("%40s", ss);

当我运行它时,程序显示如下:

run:
70.3   70.8   73.8   77.0   80.7   83.4   84.5   84.4   83.4   80.2   76.3   72.0   
     69 67 66 64 66 69 67 67 70 69 69 70BUILD SUCCESSFUL (total time: 0 seconds)

我该如何解决这个问题,以便我可以用一条System.out.printf();语句格式化整个数组一次,还是必须一个一个地格式化它们?任何帮助将不胜感激。

4

2 回答 2

3

如果您想要对格式进行特定控制,则必须单独对每个项目进行控制。有Arrays.toString(),但它不提供对单个元素的控制。

如果要打印多个数组并且希望它们的输出“对齐”,则需要选择输出格式以便发生这种情况,例如:

    float data1[] = new float[] { 1, 2.5f, 30, 4.56f, 5 };
    int data2[] = new int[] { 1, 22, 33, -4, 5 };

    for (float f:data1) System.out.printf("%6.2f ", f);
    System.out.println();
    for (int n:data2) System.out.printf("%3d    ", n);
    System.out.println();

哪个输出:

  1.00   2.50  30.00   4.56   5.00 
  1     22     33     -4      5  

该示例可能不是您要使用的精确格式,但重点是,您可以通过这种方式进行控制。如果你想做左对齐的数字,更宽的字段,如果你的类型是字符串或浮点数或双精度数或整数等。

有时它有助于在文本编辑器中或首先在纸上计算字段宽度和填充空间。例如上面,我们尝试在浮点数和整数之间排列小数点和数字,我喜欢首先在固定宽度的编辑器中计算格式(如在注释或记事本中),例如:

FFF.FF FFF.FF FFF.FF FFF.FF
III    III    III    III

然后您可以更轻松地看到它如何转换为格式说明符:

  • FFF.FF "%6.2f "
  • III    "%3d    "

Formatter有关可以传递给的格式代码的更多信息,请参阅文档System.out.printf()

于 2013-11-08T00:18:33.243 回答
1

假设您正在使用填充双精度的 2D 数组,您可以执行以下操作来获得格式良好的输出:

double arr[][] = {
  {1.012,2.123,3.345,4.456,5.543,6.543,7.456,8.673,9.456,0.356},
  {1.133,2.135,3.456,4.654,5.234,6.067,7.456,8.432,9.235,0.959}
};

for (int row = 0; row < arr.length; row ++){
    for (int col = 0; col < arr[0].length; col++){
          System.out.printf("%-7.3f", arr[row][col]);
    }
    System.out.printf("\n");
}

-数字向左对齐,并将它们全部放在漂亮的列中。这7是字段宽度,并告诉 printf 使您的列有多宽。这.3是将打印的数字(小数位)的精度。最后,f 代表浮点数,它是双精度数的格式说明符。您可以在文档中查找 java 的 printf 的语法。

于 2013-11-08T00:22:26.597 回答