为什么我不能收到arraylist的内容

时间:2019-09-04 17:22:48

标签: java arraylist

我目前正在努力修正代码的结果。

我应该从菜单中添加一个列表,然后显示该列表。但是,我无法检索其内容,而是收到了它的内存值(我猜是吗?)。

学生班

    private int number;
    private String author;
    private String title;

    public Student() {
    }

    public Student(int number, String title, String author) {
        this.number = number;
        this.title = title;
        this.author = author;
    }

    public int getNumber() {
        return number;
    }

    public String getTitle() {
        return title;
    }

    public String getAuthor() {
        return author;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String ToString() {
        return "Number: " + number + "\tTitle: " + title + "\tAuthor: " + author;
    }

主类

import java.util.*;

public class Main {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        ArrayList<Student> newStudents = new ArrayList<Student>();

        System.out.println("Please select a number from the options below \n");

        while (true) {
            // Give the user a list of their options
            System.out.println("1: Add a student to the list.");
            System.out.println("2: Remove a student from the list.");
            System.out.println("3: Display all students in the list.");


            // Get the user input

            int userChoice = input.nextInt();
            switch (userChoice) {
                case 1:
                    addStudents(newStudents);
                    break;
                case 2:
                    //removeStudent(newStudents);
                    break;
                case 3:
                    displayStudent(newStudents);
                    break;
            }
        }
    }

    public static void addStudents(ArrayList<Student> newStudents) {


        Scanner input = new Scanner(System.in);

        Student newStudent = new Student();

        System.out.print("Please enter number: ");
        newStudent.setNumber(input.nextInt());

        System.out.print("Please enter title: ");
        newStudent.setTitle(input.next());

        System.out.print("Please enter author: ");
        newStudent.setAuthor(input.next());

        if (newStudents.size() <= 100) {
            newStudents.add(newStudent);

            System.out.println("Student added\n");
        } else {
            System.out.println("\n Student interface is full!");
        }

    }

}

    private static void displayStudent(ArrayList<Student> newStudents) {


        for (Student e : newStudents) {
            System.out.println(e);
        }
    }
}

输出:

  

1:将一个学生添加到列表中。

     

2:从列表中删除一个学生。

     

3:显示列表中的所有学生。

     

3

     

Student @ 6b2acb7a

为什么@ 6b2babc7a?

感谢您的帮助和关注。我是编程的新手,而Java是我的第一语言。因此,我非常感谢您的帮助和澄清。

2 个答案:

答案 0 :(得分:0)

public String toString()中使用时,您必须重写Student类中的System.out.println()才能提供String

但是您已经public String ToString()更改为public String toString()

toString()中没有Student方法的情况下,将调用toString()中的java.lang.Object方法,该方法将返回实例的哈希码。

答案 1 :(得分:0)

调用Java中的print任何对象时,将在内部调用该类的toString()方法。与Java对象类一样,Object类是所有类的父类,toString()方法在Object类中可用。因此,此方法可用于所有Class对象。

默认情况下,对象的toString()返回getClass().getName() + '@' + Integer.toHexString(hashCode())

因此,您得到的是 Student @ 6b2acb7a 作为输出。如果要打印其他内容,则需要覆盖Student类中的toString(),无论您使用哪种方法return,都将得到打印。

Object类中的方法名为toString()。所以你需要这样做:

@Override
public String toString() {
        return "Number: " + number + "\tTitle: " + title + "\tAuthor: " + author;
    }

重要点::当您覆盖超类中的任何方法时,请使用@Override注释对其进行注释。如果您不正确地覆盖它,则会得到编译错误。而且始终最好在编译时而不是在运行时查找问题。如果这样做,您将已经找到问题了。