java print 格式化输出,格式化Java输出像表格一样

I am attempting to output information regarding students stored by my program in a tabular-like format as \t does not always provide the correct spacing. In order to do so, I came across this question and have attempted to enable a similar solution. However, I am obtaining errors with the format lines in my code when I attempt to execute it as such.

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

The goal of the code is to output in a manner similar to the following image.

FEjWU.png

Please aid me in finding my error. Is there perhaps an alternatively method to perform this?

Thanks.

EDIT: The error(s) I am getting are

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)

It should be noted that Grade is an integer and Long is a double.

解决方案

The error is because%d is for numeric non-floating point values (int, long, etc).

In the line where you print the titles, you have to use %XXs (where XX is a number) since you're passing Strings as parameters:

System.out.format("%10s%15s%15s%15s%20s",

"Grade", "Last Name", "First Name", "Student Number", "Parent Email");

In the line inside the while-loop, you need to set %d for the int and long variables, like Grade and Student Number, there's no need to convert it to String using "" + intProperty:

System.out.format ("%10d%15s%15s%15d%20s",

read.getClass(), read.getLastName(), read.getFirstName(),

read.getStudentNum(), read.getParentEmail());

Since it looks like you want to format the output to the left (and not to the right), you should add a hypen (-) symbol before the XX number:

//similar for title

System.out.format ("%-10d%-15s%-15s%-15d%-20s",

read.getClass(), read.getLastName(), read.getFirstName(),

read.getStudentNum(), read.getParentEmail());

Note: I assumed read.getClass() and read.getStudentNum() would return the Grade and Student number values as int or long.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值