2012-10-04 42 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

相关问题