我试图以类似于表格的格式输出有关我的程序存储的学生的信息,因为\ t并不总是提供正确的间距。为了做到这一点,我遇到了this question并尝试启用类似的解决方案。但是,当我尝试执行它时,我在代码中获取了格式行的错误。
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
代码的目标是以类似于下图的方式输出。
请帮助我找到错误。是否有另外一种方法可以执行此操作?
感谢。
编辑:我得到的错误是
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)
应该注意,Grade是一个整数,Long是一个整数。
答案 0 :(得分:5)
错误是因为%d
用于数字非浮点值(int
,long
等)。
在您打印标题的行中,您必须使用%XXs
(其中XX是数字),因为您将String
作为参数传递:
System.out.format("%10s%15s%15s%15s%20s",
"Grade", "Last Name", "First Name", "Student Number", "Parent Email");
在while-loop
内的行中,您需要为%d
和int
变量设置long
,例如成绩和学号,不需要转换它使用String
:{/ 1>到"" + 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()
会将Grade
和Student number
值返回为int
或long
。
答案 1 :(得分:4)
问题是:
10s %15d %15s%15s%20s
应该是:
10s %15s %15s%15s%20s
这是因为所有输入参数都是String
,因此d
(which applies to integral types only)无效。