2

我正在尝试以类似表格的格式输出有关我的程序存储的学生的信息,因为 \t 并不总是提供正确的间距。为了做到这一点,我遇到了这个问题并试图启用类似的解决方案。但是,当我尝试执行它时,我的代码中的格式行出现错误。

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 是一个 double。

4

2 回答 2

5

错误是因为%d数字非浮点值(int,long等)。

在打印标题的行中,您必须使用%XXs(其中 XX 是数字),因为您将Strings 作为参数传递:

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

在 里面的那一行while-loop,你需要设置%dint变量long,比如年级和学号,不需要转换成Stringusing "" + 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值作为intor long

于 2013-02-24T13:47:25.390 回答
4

问题是:

10s %15d %15s%15s%20s

应该:

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

这是因为所有的输入参数都是String,所以d仅适用于整型)是无效的。

于 2013-02-24T13:40:33.623 回答