2012-10-04 26 views
2

我正在寫一個程序,它將輸入一組學生的名字和GPA,並只返回失敗的學生。我不確定如何返回一個數組,避免返回null作爲該數組的一個元素。即如果初始數組中有4名學生,但只有2名學生失敗,我的數組將返回:student1,student2,null,null避免返回「空」作爲數組的一個元素 - 作業

Student Jim = new Student("Jim",1.4); 
    Student Tom = new Student("Tom",3.0); 
    Student John = new Student("John",4.0); 
    Student Bill = new Student("Bill",1.2); 
    Student[] group1 = {Jim,Tom,John,Bill}; 

public Student[] getFailing(Student[] students) { 
    int i, j; 
    Student[] failing = new Student[students.length]; 
    Student temp; 
    for(i=0, j=0; i< students.length; i++){ 
      if(students[i].getGpa() < 2.0){ 
       temp = students[i]; 
       failing[j] = temp; 
       j++; 
      } 

    } 
    return failing; 
} 

我現在的結果是,當我做了測試運行中主要是:

name = Jim gpa = 1.4 
name = Bill gpa = 1.2 
null 
null 

回答

3

如果唯一的問題是打印空值,也就是說,它的確定,如果你的陣列有null值,但你不希望看到他們在你的輸出,那麼你可以留下你的方法,因爲它是和更改您的打印代碼,以便檢查null,並避免打印它們。

但是,如果你必須保持null值超出你的數組,你可以使用動態調整數據結構一樣ArrayList,並使用toArray方法獲取數組出來。

不使用ArrayList,因爲你跟蹤許多Student對象如何表示沒有學生與j變量,你收集失敗的學生對象後,你可以創建所需長度的新數組,然後只用填充非空學生使用循環,或使用Arrays.copyOfSystem.arraycopy

+0

'System.arraycopy'很好,但是瞭解['Arrays.copyOf']是有用的(http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html# copyOf%28T [],%20int%29)。後者稱之爲前者,但我發現它使用起來稍微容易一些。 –

+0

@MichaelMcGowan謝謝,不錯的提示。我總是忘記'Arrays.copyOf' – pb2q

+0

@MichaelMcGowan,有沒有辦法在拷貝我的數組之前找到null的索引,所以我知道我的新數組的長度?或者是內置到Arrays.copyOf? – gotguts

0

你創建一個數組,它是隻要(通過原始數組填補與空所有元素),但不一定會填滿所有的插槽。在給定的例子中,Tom和John並沒有失敗,所以陣列中有兩個空(空)插槽。

我不確定您的編程級別,但您可以考慮使用動態數組(如java.util.ArrayList),並將每個失敗的學生添加到列表中,然後返回toArray()版本。

+0

有沒有辦法創建數組,以便它可以繼續擴展到原始數組的長度? – gotguts

+0

@gotguts,你不能展開數組。只需創建新的。 – jn1kk

+0

正如我所提到的,一個ArrayList,可能會聲明ArrayList failingStudents = new ArrayList ();會做的伎倆。你可以使用failingStudents.add(student);爲每個失敗的學生。最後,你會返回failingStudents.toArray(); – shortstuffsushi

0

使failing數組的大小與失敗學生的數量相同。因此,我會使用兩個幾乎相同的循環。

所以......

studentsFailed = 0; 
while(hasNextStudent()) { 
    studentsFailed++; 
} 
arr = new array[studentsFailed]; 

只是一些僞代碼。

2

我會建議你爲你的程序使用ArrayList。這可以讓你有一個可變大小的數組。這樣,您不必擔心空輸出。你只需添加你想要的學生和大小的變化來反映這一點。

+0

這是作業。我非常懷疑他會被允許使用ArrayList,因爲大部分時間編程任務的要求都非常嚴格。而且可能還沒有完成泛型。 – jn1kk

+0

我會這樣做,但趕上是我不能使用此程序的數組列表。謝謝你的提示,但我一定會牢記這一點,以備將來使用。 – gotguts

相關問題