专门用for循环计数

时间:2015-10-07 19:37:28

标签: java

我正在制定一种方法,允许一类学生拥有最多的学生。我的方法将每个学生添加到一个新课程并重复自己。

    int count = 0;
    for (int i = 0; i < totalStudents.length; i++) { //amounts of students
            totalStudents[i] = new Student(startingStudentNumber, classes[count], randomGrade(1.0, 10.0));
            startingStudentNumber++;
            count++;
            if (count == classes.length) {
                count = 0;
            }
    }

classes是类的数组class。班级class包含班级名称和可添加的学生数量。现在它将每个学生都添加到下一堂课。

我想就如何计算学生专门加入课堂的时间提供一些指导。

学生:

public Student(int studentNumber, Class classNumber, double studentGrade) {
    this.studentNumber = studentNumber;
    this.aClass = classNumber;
    this.studentGrade = studentGrade;
}

public int getStudentNumber() {
    return studentNumber;
}

public void setStudentNumber(int studentNumber) {
    this.studentNumber = studentNumber;
}

public String getClassNumber() {
    return aClass.getName();
}

public void setClassNumber(Class classNumber) {
    this.aClass.setName(classNumber.getName());
}

public Class getAClass() {
    return this.aClass;
}

public double getStudentGrade() {
    return studentGrade;
}

类别:

public Class(final String name, final int students) {
    this.name = name;
    this.students = students;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getStudents() {
    return students;
}

public void setStudents(int students) {
    this.students = students;
}

4 个答案:

答案 0 :(得分:0)

如果我能正确理解问题,上述解决方案似乎走在正确的轨道上,但是还有一个更改是替换

totalStudents[i] = new Student(startingStudentNumber, classes[count], randomGrade(1.0, 10.0));

totalStudents[i] = new Student(startingStudentNumber, classes[currentClass], randomGrade(1.0, 10.0));

然而,在进入下一堂课之前,这将填补每个班级的学生,而不是在课堂上均匀分布。如果后者是您正在寻找的,那么循环将会更复杂,最简单的方法是将分配的学生数量存储在课程的某个地方,这样您以后可以引用它并跳到下一课程。排队的已经满了。

答案 1 :(得分:0)

首先,不要声明您的学生班级Setter的变量,然后您必须致电Getter并在您的class中添加一个int count = 0; for (int i = 0; i < totalStudents.length; i++) { //amounts of students totalStudents[i] = new Student(startingStudentNumber, classes[count], randomGrade(1.0, 10.0)); class[count].setStudents(class[count].getStudents + 1); startingStudentNumber++; count++; if (count == classes.length) { count = 0; } } 等级。

public void addStudent(){
    this.students += 1;
}

另一种选择是创建

class[count].addStudent();

并将其添加到您的代码中:

int count = 0;
    for (int i = 0; i < totalStudents.length; i++) { //amounts of students
            if (class[count].isFull()){
                --i;
            } else {
                totalStudents[i] = new Student(startingStudentNumber, classes[count], randomGrade(1.0, 10.0));
                class[count].setStudents(class[count].getStudents + 1);
                startingStudentNumber++;
            }
            count++;
            if (count == classes.length) {
                count = 0;
            }
    }

编辑1:

  

如何知道课程是否已满,以及我是否应该添加任何学生?

isFull()

public boolean isFull(){ return this.students >= maxStudents; } 方法看起来像这样:

private final maxStudents = 25; // For example

和maxStudents:

[name-of-the-mailing-list] Original subject line

答案 2 :(得分:0)

要将每个学生添加到不同的课程(尽可能在所有课程中均匀分布,而不是先填写每个课程),您应该将另一个变量添加到名为CurrentStudents的Class类或类似的东西中,以保留目前被分配到班级的学生人数。

可以从循环分配学生或学生类构造函数更新此变量。

然后在count++;添加

之后
while (classes[count].getStudents()==classes[count].getCurrentStudents()) {
    count++;
    if (count==classes.length) count=0; }

这将跳过已满的任何课程。当然,您还必须添加一项规定,确保您在所有课程中没有比空间更多的学生,否则它将被困在无限循环中,试图找到一个空类。

答案 3 :(得分:-1)

如果我理解正确的问题,你可以做这样的事情

int currentClass = 0;
int count = 0;
    for (int i = 0; i < totalStudents.length; i++) { //amounts of students
            totalStudents[i] = new Student(startingStudentNumber, classes[count], randomGrade(1.0, 10.0));
            startingStudentNumber++;
            count++;
            if (currentClass >= classes.length) {
              //ran out of room
              break;
            }
            if (count == classes[currentClass].maxStudents){
                count = 0;
                currentClass++;
            }
    }

也许应该工作。如果我不在这里,请告诉我。