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

mainでテスト実行したときの現在の結果は、次のとおりです。

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

4 に答える 4

3

唯一の問題がnullの出力である場合、つまり配列に値が含まれていても出力に表示したくない場合は、メソッドをそのままにして、印刷コードを変更して、をチェックするようにすることができます。そしてそれらを印刷することは避けてください。nullnull

ただしnull、配列に値を含めないようにする必要がある場合は、のような動的にサイズ変更するデータ構造を使用し、メソッドArrayListを使用して配列を取得できます。toArray

を使用せずに、変数を使用して失敗した学生を表すオブジェクトの数をArrayList追跡しているため、失敗した学生オブジェクトを収集した後、目的の長さの新しい配列を作成し、ループを使用してnull以外の学生のみで埋めることができます、またはを使用して、、または。StudentjArrays.copyOfSystem.arraycopy

于 2012-10-04T20:58:09.757 に答える
2

プログラムにを使用することをお勧めしますArrayList。これにより、可変サイズの配列を使用できます。このように、ヌル出力について心配する必要はありません。必要な生徒を追加するだけで、それを反映してサイズが変更されます。

于 2012-10-04T20:57:25.163 に答える
0

渡された元の配列(すべての要素をnullで埋める)と同じ長さの配列を作成していますが、必ずしもすべてのスロットを埋める必要はありません。与えられた例では、トムとジョンは失敗していないので、配列には2つの空の(ヌル)スロットがあります。

プログラミングレベルはわかりませんが、java.util.ArrayListなどの動的配列を使用し、失敗した各学生をリストに追加してから、toArray()バージョンを返すことを検討してください。

于 2012-10-04T20:56:12.657 に答える
0

配列failingを失敗した生徒の数と同じサイズにします。したがって、2つのほぼ同一のループを使用します。

それで...

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

いくつかの擬似コード。

于 2012-10-04T20:57:06.843 に答える