2013-02-24 226 views
2

我試圖以表格式格式輸出關於我的程序存儲的學生的信息,因爲\ t並不總是提供正確的間距。爲了做到這一點,我遇到了this question,並試圖啓用類似的解決方案。但是,當我試圖執行它時,我正在獲取代碼中格式行的錯誤。像表格格式化Java輸出

public void displayStudents(){ 
    System.out.println ("\n-----------------------------"); 
    System.out.println ("Email System - Display Students"); 
    System.out.println ("-----------------------------"); 
    System.out.format("%10s%15d%15s%15s%20s", "Grade", "Last Name", "First Name", "Student Number", "Parent Email"); 

    StudentNode current = top; 
    while (current != null){ 
     Student read = current.getStudentNode(); 
     System.out.format ("%10s%15d%15s%15s%20s", ""+read.getClass(), read.getLastName(), read.getFirstName(), ""+read.getStudentNum(), read.getParentEmail()); 
     //This will output with a set number of character spaces per field, giving the list a table-like quality 
    } 
}//End of displayStudents 

該代碼的目標是以類似於以下圖像的方式輸出。 enter image description here

請幫助我找到我的錯誤。有沒有其他方法可以執行此操作?

謝謝。

編輯:錯誤(S)我得到的

GradeException in thread "main" java.util.IllegalFormatConversionException: d != java.lang.String 
at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source) 
at java.util.Formatter$FormatSpecifier.printInteger(Unknown Source) 
at java.util.Formatter$FormatSpecifier.print(Unknown Source) 
at java.util.Formatter.format(Unknown Source) 
at java.io.PrintStream.format(Unknown Source) 
at StudentList.displayStudents(StudentList.java:184) 
at OnlineCommunications.emailOption(OnlineCommunications.java:403) 
at OnlineCommunications.main(OnlineCommunications.java:451) 

應當注意的是,等級是一個整數,龍是雙。

+1

你有什麼樣的問題? – 2013-02-24 13:36:56

+0

對不起,我添加了錯誤。@LuiggiMendoza – n0shadow 2013-02-24 13:40:34

回答

5

錯誤是因爲%d用於數值非浮點值(int,long等)。

在打印標題,你必須使用%XXs線(其中XX是一個數字),因爲你傳遞String S作爲參數:

System.out.format("%10s%15s%15s%15s%20s", 
    "Grade", "Last Name", "First Name", "Student Number", "Parent Email"); 

在行while-loop裏面,你需要設置%dintlong變量,如等級和學號,就沒有必要將其轉換爲String使用"" + intProperty

System.out.format ("%10d%15s%15s%15d%20s", 
    read.getClass(), read.getLastName(), read.getFirstName(), 
    read.getStudentNum(), read.getParentEmail()); 

因爲它看起來像要格式化輸出到左邊(而不是正確的),你應該添加一個連字符( - )的XX號碼前的符號:

//similar for title 
System.out.format ("%-10d%-15s%-15s%-15d%-20s", 
    read.getClass(), read.getLastName(), read.getFirstName(), 
    read.getStudentNum(), read.getParentEmail()); 

注:我以爲read.getClass()read.getStudentNum()會將GradeStudent number的值返回爲intlong

+0

感謝您提供其他信息。 – n0shadow 2013-02-24 13:53:06

+0

@mCode歡迎您 – 2013-02-24 13:53:18

+0

我可以知道您應該使用的是數據類型是雙倍> – hyperfkcb 2016-10-21 17:29:48

4

的問題是:

10S %15D%15S%15S%20S

應該是:

10S %15S%15S%15S% 20s

這是因爲所有輸入參數都是String,所以dwhich applies to integral types only)無效。

+0

非常感謝,解決了它。 – n0shadow 2013-02-24 13:47:33

+0

只是一個小問題,看起來這個右對齊了「表格」的「單元格」。有什麼辦法讓它左對齊嗎? – n0shadow 2013-02-24 13:48:44

+0

@mCode涵蓋在我的答案中。 – 2013-02-24 13:48:58