打印 Treeset<CustomClass> return 奇怪的打印?
Print Treeset<CustomClass> return a weird print?
所以我有三个 classes:
- 实验室
- 学生
- 考试
我需要输入一个 Student 的 ID,将 Exam class 的考试添加到 Treeset 中,所有这些都在 Student class.
这样做之后,我需要用迭代器打印这个 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;
}
}
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;
}
}
替换
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());
}
}
所以我有三个 classes:
- 实验室
- 学生
- 考试
我需要输入一个 Student 的 ID,将 Exam class 的考试添加到 Treeset 中,所有这些都在 Student class.
这样做之后,我需要用迭代器打印这个 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;
}
}
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;
}
}
替换
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());
}
}