为什么除了 null 什么都不打印?

Why won't this print anything but null?

为什么除了 null 什么都不打印?

我正在尝试添加在您回答问题时创建的新对象,然后将它们添加到我稍后可以访问的数组中。

    public static void main(String[] args) {
    // TODO code application logic here
    addastudent();
}

private static void addastudent(){
    ArrayList<Object> students = new <Object> ArrayList();
    Scanner user = new Scanner(System.in);
    System.out.println("First Name: " );
    String fname = user.next();
    System.out.println("Last Name: ");
    String lname = user.next();
    System.out.println("Major: ");
    String major = user.next();
    System.out.println("GPA: ");
    double gpa = user.nextDouble();
    student a = new student (fname,lname,major,gpa);
    students.add(a);

    System.out.println(students);




    }

编辑:感谢您指出 toString() 问题。就是这样。我忘了我告诉 toString() 为 return Null。当你错过这么简单的事情时,我讨厌它......再次感谢你们

改变

ArrayList<Object> students = new <Object> ArrayList();

ArrayList<student> students = new ArrayList<student>();

添加覆盖

toString

Student class 中的方法。 暗示!如果您使用的是 eclipse IDE,那么 select 您的学生 class 并转到“源”菜单,select 从那里生成 toString 方法。

首先,请遵循Java命名约定,将您的方法重命名为addStudent,同时请将student class更改为Student

在这一行中,

ArrayList<Object> students = new <Object> ArrayList();

您正在创建一个名为 studentsArrayList 对象,Object 非常通用,请尝试更具体并将其更改为:

ArrayList<Student> students = new <> ArrayList();

最后,您打印的是对象,而不是内容。为了打印内容,您需要在 students 数组列表上迭代并打印每个对象,在 Student class.

中覆盖 equals 之后

这段代码中有几个问题。

  • 您应该覆盖 Student class 中的 toString。否则它将使用对象的 toString,它会打印类似 "Student@148ccb8".
  • 的内容
  • 确保 Student 的构造函数使用给定参数分配其所有字段。您没有提供代码,但它应该看起来像这样:

    public class Student {
    
        private String firstname;
        private String lastname;
        private String major;
        private double gpa;
    
        public Student(
            String firstname,
            String lastname,
            String major,
            double gpa) {
    
            this.firstname = firstname;
            this.lastname = lastname;
            this.major = major;
            this.gpa = gpa;
        }
    
        @Override
        public String toString() {
    
            return "Student [firstname=" + firstname + ", lastname=" + lastname + ", major="
                    + major + ", gpa=" + gpa + "]";
        }
    }
    

还有一些未成年人:

  • Class Java 中的名称应以大写字母开头。所以是学生而不是学生。

  • 在创建单个 Student 实例时创建 ArrayList 是不合适的(目前),但是当您将代码扩展到多个 Student 实例时是有意义的。

  • 对 Object 使用泛型根本就不是在使用它们!

  • 使用 Collection classes 时,通常将您的变量声明为公共超类型。

最后两点是:

List<Student> students = new <Student>ArrayList();

如果这是完整代码,问题是您没有学生 class。为了使用学生 class 你必须告诉你的程序它是什么。

这里有一个简单的学生 class 让你开始。

public class Student {
    private String fname;
    private String lname;
    private String major;
    private double gpa;

    public Student(String fname, String lname, String major, double gpa) {
        this.fname = fname;
        this.lname = lname;
        this.major = major;
        this.gpa = gpa;
    }

}

我还没有编译这段代码,但看起来应该可以。

注意:您需要更改

new student (fname,lname,major,gpa);

new Student (fname,lname,major,gpa);

(注意大小写变化)

students变量(ArrayList)应该是实例变量,不是局部变量。

根据上面的代码,您将始终在列表中只有一个学生,因为每次调用方法 addastudent 时都会重新创建 ArrayList。