2013-10-12 66 views
0

我對Java編程非常陌生,無法在任何地方找到我的問題的答案。基本上,我已經成功地創建一個程序,建立攝氏華氏溫度轉換和華氏攝氏度轉換的圖表,但類似這樣的9號之後正確我的循環print語句不排隊:如何格式化以Java環形打印的行

9.0     48.2     40.0     4.44    
10.0     50.0     41.0     5.0

我需要使用兩種不同的方法噸o計算轉換,然後在主要方法中調用它們。下面是與println語句,主要的方法,我reffering到:

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用這種長print語句使數字會排隊與另一個?

在過去,我已經使用printf%3d和%5d等將整數向上排列,但是,我無法使用此特定打印語句完成此工作。

任何想法和/或幫助將不勝感激。

+0

糾正了錯誤的代碼格式。請付出一些努力讓您的代碼可讀。 –

回答

0

使用\ t來格式化它們,因爲這將它們均勻地分開。

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

這可能會導致不可靠的結果。 –

+0

這個解決方案對我來說確實有效,感謝故障排除。氣墊船,這怎麼會導致不可靠的結果? – censortrip

+0

如果一串字符比標籤長,可能會導致不可靠的結果,儘管您提供的代碼不允許這樣做。 – Troubleshoot

4

使用System.out.printf(...)和一個格式字符串來輸出您的數據在常規列。避免使用\t,因爲它不可靠。例如,請看here

最終,你的代碼看起來像:

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

凡formatString的是使用printf格式指示符和寬度常量將允許漂亮輸出字符串。我會讓你試驗格式字符串。它也會以「%n」結尾,以便它變成一個格式化的println。

+0

謝謝HFOE,我一直在與格式字符串搞亂。我仍然無法使所有四行工作,只有第一個攝氏度實際打印,並且我在格式字符串的末尾添加了「%n」。 – censortrip

1

加入什麼氣墊船充滿鰻魚說,使用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所以有人就糾正我,如果我走了]

0

使用「\ t」的還是printf可能是不會幫助你,因爲增加的空間會考慮2個字符串文字。例如。 9.0是3個字符長,10.0是4個字符長。所以在這種情況下,應用的空格是正確的,但是你的字符串文字本身的長度是不同的。

嘗試更改下面的代碼,再使用一個散列。

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