如何使用Java中的printf()格式化数组?

时间:2013-11-08 00:13:36

标签: java printf

我知道如何格式化单个变量,但我不知道如何使用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();语句格式化整个数组,或者我必须逐个格式化它们?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果您想要对格式进行特定控制,则必须分别对每个项目执行此操作。有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    "

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

答案 1 :(得分: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代表float,它是双精度的格式说明符。您可以在文档中查找java的printf语法。