[英]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.