TreeSetの<CustomClass>奇妙な印刷を返す印刷?

SlimShadys:

私は三つのクラスを持っているので。

  • ラボ
  • 学生
  • 試験

私は、入力中に学生のIDを取るに試験クラスの試験を追加する必要がありTreeSetの Studentクラス内で、試験タイプでこれのすべてを。

それをやった後、私はイテレータとTreeSetのを印刷する必要があります..しかし、私が得たすべては、いくつかの奇妙です:java.util.TreeMap$KeyIterator@1b6d3586代わりに。

私はイテレータを作成し、TreeSetのを渡されたが、コードは動作しません。

ファイルをここに。

Lab.java

public class Lab {

    public static void main(String[] args) {

        Student stu = new Student();

        Student.insert();
        System.out.println("Insert ended.\n");

        stu.print();
        System.out.println("\nEnd of the program.");

    }

}

Student.java

import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

public class Student implements Comparable<Student>{

    private static int ID;

    private static Set<Exam> exams = new TreeSet<Exam>();

    public static void insert() {

        Scanner input  = new Scanner(System.in);
        Scanner input1 = new Scanner(System.in);
        Scanner input2 = new Scanner(System.in);
        Scanner input3 = new Scanner(System.in);

        int exam_code = 1;
        String exam_name;
        int exam_grade;

        System.out.println("Student's ID: ");
        ID = input.nextInt();

        System.out.println("--- EXAMS INSERT ---");

        while (exam_code != 0) {

            System.out.println("Exam's code: ");
            exam_code = input1.nextInt();

            if (exam_code == 0) {
                break;
            }

            else {

                System.out.println("Exam's name: ");
                exam_name = input2.nextLine();

                System.out.println("Exam's grade: ");
                exam_grade = input3.nextInt();

                exams.add(new Exam(exam_code, exam_name, exam_grade));

            }

        }

        input.close();
        input1.close();
        input2.close();
        input3.close();

    }

    public void print() {

        System.out.println("ID: " + ID);

        System.out.println("\nExams done: ");

        Iterator<Exam> es = exams.iterator();

        boolean hasnext = false;

        while (hasnext != true) {

            if (es.hasNext()) {

                System.out.println(es);

                hasnext = true;
            }

            else {
                hasnext = false;
            }
        }

    }

    @Override
    public int compareTo(Student o) {
        // TODO Auto-generated method stub
        return 0;
    }

}

Exam.java


public class Exam implements Comparable<Exam>{

    public int exam_code;
    private String exam_name;
    private int exam_grade;

    public Exam(int code, String name, int grade) {

        exam_code = code;
        exam_name = name;
        exam_grade = grade;

    }

    @Override
    public int compareTo(Exam o) {
        // TODO Auto-generated method stub
        return 0;
    }

}
Egorザイツェフ:

置き換えます

System.out.println(es);

System.out.println(es.next());

EDIT:ベターに全印刷()メソッドを置き換えます

public void print() {

        System.out.println("ID: " + ID);

        System.out.println("\nExams done: ");

        for (Exam exam : exams) {
            System.out.println(exam);
        }

    }

自分で反復を実装する必要はありませんので、ために、各そのような場合のためのJavaのループがあります。

EDIT:Iteratorを使います

public void print() {

    System.out.println("ID: " + ID);

    System.out.println("\nExams done: ");

    Iterator<Exam> es = exams.iterator();

    while (es.hasNext()) {
        System.out.println(es.next());
    }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=362534&siteId=1