Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 打印树集<;定制类>;返回一个奇怪的打印?_Java_Iterator_Treeset_Println - Fatal编程技术网

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

所以我有三门课:

  • 实验室
  • 学生
  • 考试
我需要输入一个学生的ID,将考试类的考试添加到考试类型的树集中,所有这些都在学生类中

完成后,我需要使用迭代器打印此树集。。但我得到的只是一些奇怪的东西:
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()方法,现在它将打印树集。谢谢:)