繁体   English   中英

打印树集<CustomClass>返回一个奇怪的打印?

[英]Print Treeset<CustomClass> return a weird print?

所以我有三个类:

  • 实验室
  • 学生
  • 考试

我需要输入一个学生的 ID,将 Exam 类的考试添加到一个带有 Exam 类型的Treeset 中,所有这些都在 Student 类中。

这样做之后,我需要用迭代器打印这个 Treeset .. 但我得到的只是一些奇怪的: java.util.TreeMap$KeyIterator@1b6d3586代替。

我创建了迭代器并传递了树集,但代码不起作用。

这里的文件。

实验室.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.");

    }

}

学生.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;
    }

}

考试.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;
    }

}

代替

System.out.println(es);

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

编辑:更好地将整个 print() 方法替换为

public void print() {

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

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

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

    }

因为不需要自己实现迭代,所以Java中有for-each循环来处理这种情况。

编辑:使用迭代器

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());
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM