如何格式化在Java中循环的打印行

时间:2013-10-12 19:38:28

标签: java loops printf

我是Java编程的新手,无法在任何地方找到问题的答案。基本上,我已经成功创建了一个程序,可以构建一个Celsius到华氏转换和华氏到Celsius转换的图表,但是我的循环打印语句在数字9之后没有正确排列,类似于:

9.0 48.2 40.0 4.44
10.0 50.0 41.0 5.0

我被要求使用两种不同的方法来计算转换,然后在main方法中调用它们。这是我正在努力的println语句的主要方法:

public static void main(String[]args){
   double celsius = 1;
   double fahrenheit = 32;

   while(celsius <= 50 && fahrenheit <= 120){

     double toFarhenheit = celsiusToFahrenheit(celsius);
     double toCelsius = fahrenheitToCelsius(fahrenheit); 

     DecimalFormat fardec = new DecimalFormat("#.##");  
     toFarhenheit = Double.valueOf(fardec.format(toFarhenheit));

     DecimalFormat celsdec = new DecimalFormat("#.##");  
     toCelsius = Double.valueOf(celsdec.format(toCelsius));

     System.out.println(celsius + "   " + toFarhenheit + "  " + fahrenheit + 
           "  " +toCelsius);

     celsius++;
     fahrenheit++;            
   }    
}

总而言之,无论如何都要使用带有这种长打印声明的printf,以便数字相互排列?

在过去,我使用printf%3d和%5d等来排列整数,但是,我无法使用这个特定的print语句来完成这项工作。

非常感谢任何想法和/或帮助。

4 个答案:

答案 0 :(得分:4)

使用System.out.printf(...)和格式字符串在常规列中输出数据。避免使用\t,因为它不可靠。例如,请查看here

最终您的代码如下:

System.out.printf(formatString, celsius, toFarhenheit, fahrenheit, toCelsius);

其中formatString是一个String,它使用printf格式说明符和宽度常量,允许漂亮的输出。我会让你试验格式字符串。它也会以“%n”结尾,因此它实际上是一个带格式的println。

答案 1 :(得分:1)

添加到Hovercraft Full Of Eels所说的,使用没有"\t"的System.out.printf是一个更好的解决方案。 例如,您应该可以执行以下操作:

String myformat = "%0$10s";

格式说明:

  1. %0s将您的输出标识为字符串
  2. $10告诉它确保至少将10个字符写入输出。因此,你将有一个固定的宽度。
  3. 有关更多详情,请参阅http://docs.oracle.com/javase/6/docs/api/java/util/Formatter.html#syntax

    [暂时没有使用java,所以有人在我离开的时候纠正我]

答案 2 :(得分:0)

使用 \ t 格式化它们,因为这会将它们均匀分开。

System.out.println(celsius + "\t" + toFarhenheit + "\t" + fahrenheit + 
       "\t" +toCelsius);

答案 3 :(得分:0)

使用“\ t”或使用printf可能无法帮助你,因为正在添加的空间考虑了2个字符串文字。对于Eg。 9.0是3个字符长,10.0是4个字符长..所以在这种情况下应用的空格是正确的但你的字符串文字本身具有不同的长度。

尝试更改下面的代码,再使用一个哈希值。

DecimalFormat fardec = new DecimalFormat("##.##");