Java 打印树集<;定制类>;返回一个奇怪的打印?
所以我有三门课:Java 打印树集<;定制类>;返回一个奇怪的打印?,java,iterator,treeset,println,Java,Iterator,Treeset,Println,所以我有三门课: 实验室 学生 考试 我需要输入一个学生的ID,将考试类的考试添加到考试类型的树集中,所有这些都在学生类中 完成后,我需要使用迭代器打印此树集。。但我得到的只是一些奇怪的东西:java.util.TreeMap$KeyIterator@1b6d3586 我创建了迭代器并传递了树集,但代码无法工作 这是文件 Lab.java public class Lab { public static void main(String[] args) { Stu
- 实验室
- 学生
- 考试
java.util.TreeMap$KeyIterator@1b6d3586
我创建了迭代器并传递了树集,但代码无法工作
这是文件
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.");
}
}
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;
}
}
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;
}
}
Student.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.");
}
}
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;
}
}
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;
}
}
import java.util.Iterator;
导入java.util.Scanner;
导入java.util.Set;
导入java.util.TreeSet;
公立班学生实行可比性{
私有静态int-ID;
私有静态集检查=新树集();
公共静态void insert(){
扫描仪输入=新扫描仪(System.in);
扫描仪输入1=新扫描仪(System.in);
扫描仪输入2=新扫描仪(System.in);
扫描仪输入3=新扫描仪(System.in);
int考试代码=1;
字符串名称;
国际考试成绩;
System.out.println(“学生ID:”);
ID=input.nextInt();
System.out.println(“--INSERT--”);
while(考试代码!=0){
System.out.println(“考试代码:”);
检查代码=input1.nextInt();
如果(检查代码==0){
打破
}
否则{
System.out.println(“考试名称:”);
检查名称=input2.nextLine();
System.out.println(“考试成绩:”);
考试成绩=输入3.nextInt();
添加(新考试(考试代码、考试名称、考试成绩));
}
}
input.close();
input1.close();
input2.close();
input3.close();
}
公开作废印刷品(){
System.out.println(“ID:+ID”);
System.out.println(“\n附件完成:”);
迭代器es=检查。迭代器();
布尔hasnext=false;
while(hasnext!=真){
如果(es.hasNext()){
系统输出打印号(es);
hasnext=true;
}
否则{
hasnext=false;
}
}
}
@凌驾
公共内部比较(学生o){
//TODO自动生成的方法存根
返回0;
}
}
Exam.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.");
}
}
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;
}
}
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;
}
}
公开课考试实行可比性{
公共int考试代码;
私有字符串名称;
私家联考(u级);;
公开考试(整数代码、字符串名称、整数分数){
考试代码=代码;
考试名称=姓名;
考试成绩=成绩;
}
@凌驾
公共国际比较(考试o){
//TODO自动生成的方法存根
返回0;
}
}
更换
System.out.println(es);
到
编辑:最好将整个print()方法替换为
public void print(){
System.out.println(“ID:+ID”);
System.out.println(“\n附件完成:”);
用于(考试:考试){
系统输出打印(考试);
}
}
因为您不需要自己实现迭代,所以在这种情况下,Java中的每个循环都有for
编辑:使用迭代器
public void print(){
System.out.println(“ID:+ID”);
System.out.println(“\n附件完成:”);
迭代器es=检查。迭代器();
而(es.hasNext()){
System.out.println(es.next());
}
}
这是否回答了您的问题?不幸的是,它打印的是同样的东西(你的新印刷品)方法有效,但我不知道为什么,只打印我添加的第一个测试。其他的都被丢弃了。另外,我的老师告诉我们用迭代器打印树集,这就是我实现它的原因。啊,我的代码中有一个错误。编辑它并使用迭代器添加正确的实现,还有一个问题。你使用树集存储你的考试实例,TreeSet要求通过考试来实现Comparable接口和compareTo方法,但您的实现不正确(它只返回0,这意味着TreeSet认为您的所有考试实例都是相等的,而Set不存储重复实例,因此它只存储其中一个)。请阅读并正确重写考试类中的compareTo()和equals()方法。如果您正在努力为考试实例创建自然顺序,则可以使用HashMap而不是TreeMap。这样,您就不必实现可比接口,但必须正确重写hashCode()和equals()方法相应地简化了compareTo()方法,现在它将打印树集。谢谢:)