为什么除了 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();
您正在创建一个名为 students
的 ArrayList
对象,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。
为什么除了 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();
您正在创建一个名为 students
的 ArrayList
对象,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。