为什么这不会打印除null之外的任何东西?

时间:2015-01-21 10:33:23

标签: java arrays methods java.util.scanner

为什么除了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()返回Null。当你想念那些简单的东西时,我讨厌它......再次感谢你们。

5 个答案:

答案 0 :(得分:0)

更改

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

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

添加覆盖

  

的toString

学生班的

方法。 暗示!如果您正在使用eclipse IDE,那么选择您的学生类并转到Source菜单并从那里选择generate toString方法。

答案 1 :(得分:0)

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

在这一行中,

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

您正在创建ArrayList对象,该对象名为studentsObject非常通用,请尝试更具体,并将其更改为:

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

最后,您要打印对象,而不是内容。要打印内容,您需要在students类中重复equals并在Student类中覆盖{{1}}后打印每个对象。

答案 2 :(得分:0)

此代码中有几个有问题的项目。

  • 你应该在Student课程中覆盖toString 。否则它将使用toString of Object,它将打印类似“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 + "]";
        }
    }
    

还有一些未成年人:

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

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

  • 在Object中使用泛型完全没有使用它们!

  • 使用Collection类时,通常会将变量声明为常用的超类型。

最后两点是:

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

答案 3 :(得分:0)

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

这是一个简单的学生班,让你开始。

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);

(注意案件变更)

答案 4 :(得分:0)

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

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