2017-03-14 68 views
0

我在Student类中有getSubjects方法,该类在子类中被覆盖。我想用getSubjects方法打印数组。从数组中打印

主类代码:

package javalab5; 
import java.util.*; 

/** 
* 
* @author Saj 
*/ 
public class JavaLab5 { 
    public static final int DEBUG = 0; 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     Student s[] = new Student[10]; 
     s[0] = new MathStudent(14,15); 
     s[1] = new MathStudent(16,19); 
     s[2] = new MathStudent(18,21); 
     s[3] = new MathStudent(23,28); 
     s[4] = new ScienceStudent(32,25); 
     s[5] = new ScienceStudent(28,56); 
     s[6] = new ScienceStudent(29,28); 
     s[7] = new ComputerStudent(25,38); 
     s[8] = new ComputerStudent(34,39); 
     s[9] = new ComputerStudent(45,56); 
     int numberOfStudents = 0; 

     for (int loop = 0; loop < numberOfStudents; loop++) { 
      System.out.print("Student "+ loop + " >>"); 
      System.out.println(s[loop].getSubjects()); 
     } 
    } 

} 

UPDATE 这是getSubjects方法:

public String getSubjects(){ 
     return(" Science Student >> " + "Physics Grade: " + physicsGrade 
       + " Astronomy Grade: " + astronomyGrade); 
    } 
+0

你的getSubjects()方法返回一个数组吗? –

+0

@Surace请参阅getSubject方法的更新,它不返回数组。 – donk2017

+0

那么...你的问题是什么呢? – azurefrog

回答

4

那么首先你的循环绝不会因为这条线的运行:int numberOfStudents = 0;转换成英语的说法是:“只要numberOfStudents小于0运行此循环“,但你已经在0并且不小于0!如果您正试图通过整个阵列运行,你应该将其设置为10,因为你有10名学生:

for (int loop = 0; loop < 10; loop++) { 
     System.out.print("Student "+ loop + " >>"); 
     System.out.println(s[loop].getSubjects()); 
    } 

这应该工作:)

编辑:由“10”我在这里使用的方法我们称之为行业中的“魔术数字”,基本上是一个硬编码的数字,没有分配给变量,想象如果你有10个循环的幻数,你将不得不花费不必要的时间来改变它们,如果你需要的话通常这是避免幻数的最佳做法:

private final int NO_STUDENTS = 10; 
Students[] s = new Students[NO_STUDENTS]; 
//populate your array here 
//Now run loop 
for (int loop = 0; loop < s.length; loop++) { 
    System.out.print("Student "+ loop + " >>"); 
    System.out.println(s[loop].getSubjects()); 
} 
+0

我会建议使用's.length'而不是文字'10'。这样,学生人数发生变化时不会有什么问题 – SilverNak

1

你将永远不会进入你的循环,因为你通过0分配:

int numberOfStudents = 0;//<------------------------- 
for (int loop = 0; loop < numberOfStudents; loop++) { 
//-------------------------------^^------------------ 

我认为你必须作出s.length

for (int loop = 0; loop < s.length; loop++) { 
//------------------------^------------------ 
+0

如果他担心数组未填满,OP还应该输入空检查。 –

+1

mmmm,是@BerkleyLamb,谢谢你,我只是回答他在做什么,所以他已经填补了我的错误? –

0

如果你有10个学生,你应该使用:

int numberOfStudents = 10; 

但最好是使用数组的长度属性在for循环(在这种情况下,你不需要变量):

for (int loop = 0; loop < s.length; loop++) { 
    System.out.print("Student "+ loop + " >>"); 
    System.out.println(s[loop].getSubjects()); 
}