【问题标题】:Outputting information without explicitly calling toString() in java在java中不显式调用toString()的情况下输出信息
【发布时间】:2016-04-06 02:55:32
【问题描述】:

对于 println 中的第 6 步,我知道如何显式调用 toString,但是如何在不显式调用 toString() 或使用任何访问器方法的情况下从数组中的当前学生输出学生信息?

import java.util.Scanner;

public class Students
{
  private static Scanner input = new Scanner(System.in);

  public static void main(String[] args)
  {
    Student[] students;

    students = getStudents();
    printStudents(students);
  }

  private static Student[] getStudents()
  {
    Student[] temp;
    int       how_many;

    System.out.print("How many students? ");
    how_many = input.nextInt();
    purgeInputBuffer();
    temp =  new Student[input.nextInt()];  // Step 1 ???
    for (int i = 0; i < temp.length; i++)
    {
      getStudent();
      temp[i] = getStudent();     // Step 2
    }
    return temp;    // Step 3
  }

  private static Student getStudent()
  {
    String name,
           address,
           major;
    double gpa;

    System.out.print("Enter name: ");
    name = input.nextLine();
    System.out.print("Enter address: ");
    address = input.nextLine();
    System.out.print("Enter major: ");
    major = input.nextLine();
    System.out.print("Enter GPA: ");
    gpa = input.nextDouble();
    purgeInputBuffer();

    return new Student(name, address, major, gpa);     // Step 4
  }

  private static void printStudents(Student[] s)
  {
    System.out.println();
    for (int i = 0; i < s.length; i++)    // Step 5
    {
      System.out.println(______);     // Step 6
    }
  }

  private static void purgeInputBuffer()
  {
    // ----------------------------------------------------
    // Purge input buffer by reading and ignoring remaining
    // characters in input buffer including the newline
    // ----------------------------------------------------
    input.nextLine();
  }
}

【问题讨论】:

  • 你的意思是你不想为Student类实现toString()方法?
  • 我对我的指令开始感到困惑,这是一个赋值,我可以使用 toString,只是隐含而不是显式

标签: java printing tostring implicit


【解决方案1】:
  1. 将变量name, address, major, gpa 声明为成员变量。
  2. 覆盖该类的toString() 方法。

    public String toString() {
        return "Name: " + name + "\n" + "Address: " + .... //whatever you want to print.
    }
    
  3. 当您需要打印学生的详细信息时,将其传递给println 方法:

    System.out.println(obj); //where obj is a Student object.
    

【讨论】:

    【解决方案2】:
    • 在您的 Stundent 类中重写 toString() 方法,例如:

      @Override
      public String toString() {
          return "Stundent [ Name: " + name + ", Address: " + address + ", Major: " + major + ", GPA: " + gpa + " ]";
      }
      
    • 并修改您的 printStudents() 方法如下(您的第 6 步):

      private static void printStudents(final Student[] s) {
          System.out.println();
          for (final Student student : s) {
              System.out.println(student);
          }
      }
      
    • 那么你的输出应该是这样的:

    学生 [姓名:Name1,地址:Addr1,专业:Major1,GPA:3.0]
    学生[姓名:Name2,地址:Addr2,专业:Major2,GPA:3.5]

    现在您看到 toString() 方法将被隐式调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      相关资源
      最近更新 更多