Print Treeset <CustomClass>вернуть странную печать? - PullRequest
1 голос
/ 17 января 2020

Итак, у меня есть три класса:

  • Лабораторная работа
  • Ученик
  • Экзамен

Мне нужно ввести на вход идентификатор Студента, добавьте экзамены класса Exam в Treeset с типом Exam, все это внутри класса Student.

После этого мне нужно распечатать этот Treeset с помощью Итератора. ... но все, что я получил, это немного странно: java.util.TreeMap$KeyIterator@1b6d3586.

Я создал Iterator и передал 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;
    }

}

Экзамен. 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;
    }

}

1 Ответ

2 голосов
/ 17 января 2020

Заменить

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

    }

, поскольку вам не нужно реализовать итерацию самостоятельно, для таких случаев существует l-1014 * в Java для каждого.

РЕДАКТИРОВАТЬ: Использование 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());
    }
}
...