2015-01-21 87 views
0

为什么不打印任何东西而是空?为什么不打印任何东西而是空?

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

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。我恨它,当你错过的东西那么简单......再次感谢球员

+0

我不知道'System.out.println'应该如何处理一个你传给它的数组('students'),但这里真的很奇怪的是你似乎创建了一个**新学生数组* *为每个**学生**添加... – CiaPan 2015-01-21 10:38:52

+0

记录不能存在于adddastudent()方法之外,为了跟踪,您需要将方法外部的ArrayList声明为每次方法结束时超出范围。 – 2015-01-21 11:00:00

回答

0

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

  • 您应该将改写为Student类中的toString。否则,它将使用Object的toString,它将打印“Student @ 148ccb8”之类的东西。
  • 确保学生的构造函数将其所有字段分配给定的参数。你没有提供的代码,但它应该是这个样子:

    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不合适(但尚未),但将代码扩展到严重学生实例时有意义。

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

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

随着最后两点是:

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

变化

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

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

添加overided

的toString

学生课程中的方法。 提示!如果你使用的是Eclipse IDE,那么选择你的学生类并转到源菜单并从那里选择生成toString方法。

0

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

在这一行,

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

你要创建一个ArrayList对象,这就是所谓的studentsObject是非常通用的,尝试更加具体,将其更改为:

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

最后,您正在打印对象,而不是内容。为了打印内容,在覆盖equals中的Student类后,您需要遍历students数组列表并打印每个对象。

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

(通知的情况下改变)

0

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

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

相关问题