0

我对 Java 编程很陌生,在任何地方都找不到我的问题的答案。基本上,我已经成功创建了一个程序,该程序构建了摄氏到华氏转换和华氏到摄氏转换的图表,但是我的循环打印语句在数字 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

4 回答 4

4

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

最终您的代码将如下所示:

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

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

于 2013-10-12T19:42:59.097 回答
1

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

String myformat = "%0$10s";

格式说明:

  1. %0s将您的输出标识为字符串
  2. $10告诉它确保至少有 10 个字符被写入输出。因此,您将有一个固定的宽度。

有关更多详细信息,请参阅http://docs.oracle.com/javase/6/docs/api/java/util/Formatter.html#syntax

[有一段时间没有使用java,所以如果我不在,有人会纠正我]

于 2013-10-12T19:58:58.137 回答
0

使用 "\t" 或使用 printf 可能不会帮助您,因为添加的任何空间都会考虑到 2 个字符串文字。例如。9.0 是 3 个字符长,10.0 是 4 个字符长.. 所以在这种情况下,应用的空格是正确的,但您的字符串文字本身的长度不同。

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

DecimalFormat fardec = new DecimalFormat("##.##"); 
于 2013-10-12T20:29:25.347 回答
0

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

System.out.println(celsius + "\t" + toFarhenheit + "\t" + fahrenheit + 
       "\t" +toCelsius);
于 2013-10-12T19:41:27.087 回答