2015-01-21 85 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。

相關問題