2013-04-07 76 views
0

我正在嘗試編寫一個應用程序,該程序需要用戶指定的數字,然後使這些許多對象(我稱它們爲學生)爲它們分配隨機名稱和數字,然後對它們的數字進行排序。我有種解決方法,但是在打印數組時遇到問題。我的代碼如下。我得到的輸出是「New Object」輸入的次數,後面跟着每個toString調用的「0:null」。任何幫助將不勝感激。謝謝。無法打印我的數組對象

import java.util.Random; 
import java.util.Scanner; 

public class application { 

public static void main(String[] args) { 

    int studentSerialNumber; 
    String studentName; 

    System.out.println("Enter the number of students you would like to sort: "); 
    Scanner scanner = new Scanner(System.in); 
    int numOfStudents = scanner.nextInt(); 

    Student[] anArrayToSort = new Student[numOfStudents]; 

    for (int i = 0; i < anArrayToSort.length; i++) { 

     studentSerialNumber = ((int)(Math.random() * 8888)) + 1000; 
     studentName = getStudentName(); 

     anArrayToSort[i] = new Student(studentSerialNumber, studentName); 

    } 

    for (int i = 0; i < anArrayToSort.length; i++) { 
     System.out.println(anArrayToSort[i].toString()); 

    } 
} 

private static String getStudentName() { 

    String studentName = ""; 
    int i = 7; 
    Random r = new Random(); 

    while (i > 0) { 
     char c = (char) (r.nextInt(26) + 'a'); 
     studentName = studentName + c; 
     i--; 
    } 

    return studentName; 
} 
} 


public class Student { 

int studentSerialNumber; 
String studentName; 

Student(int studentSerialNumber, String studentName) { 

    studentSerialNumber = studentSerialNumber; 
    studentName = studentName; 
    System.out.println("New Object"); 

} 

public String toString() { 
     return studentSerialNumber + ": " + studentName; 
    } 
} 
+0

你是如何從靜態環境中實例化學生的? 'anArrayToSort [i] =新生(studentSerialNumber,studentName);' – TheEwook 2013-04-07 15:51:15

回答

2

分配在構造函數中有壞:

Student(int studentSerialNumber, String studentName) { 
    studentSerialNumber = studentSerialNumber; 
    studentName = studentName; 
    System.out.println("New Object"); 
} 

這應該是:

Student(int studentSerialNumber, String studentName) { 
    this.studentSerialNumber = studentSerialNumber; 
    this.studentName = studentName; 
    System.out.println("New Object"); 
} 

目前您是分配值本身,而不是對Student實例字段。

+0

謝謝至強!那樣做了。我知道我錯過了一些簡單的事情。我會鼓勵你,但我沒有足夠的聲譽。案件結案!再次感謝。 – joerdie 2013-04-07 15:52:52

+0

在過去,命名慣例(例如匈牙利符號)會阻止這一點。現在IDE應該把它拿起來。 – 2013-04-07 15:54:41