从阵列打印

时间:2017-03-14 18:37:19

标签: java arrays

我在getSubjects类中有一个Student方法,它在子类中被重写。

我正在尝试使用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());
        }
    }

}

更新 这是getSubjects方法:

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

3 个答案:

答案 0 :(得分: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());
}

答案 1 :(得分:1)

您永远不会进入循环,因为您将numberOfStudents分配为0:

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

我认为你必须制作s.length

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

答案 2 :(得分:0)

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

int numberOfStudents = 10;

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

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