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