使用多维数组对我来说是第一次,所以我对这些数组附带的一些方面的理解有点......含糊不清。现在快速回顾一下这个程序将在完成后使用的内容......
这将允许教师输入学生的姓名和四个相应的考试成绩。他们最多可以列出15名学生。
实施例。约翰史密斯:67 75 84 52 Jane Doe:54 86 81 79
在填写firstNameField,lastNameField和test1Field-test4Field之后,按下addButton,在另一个字段中输出它,并输出你添加的每个学生创建一个列表。
我的问题是找到班级平均水平。我想找到仅拉出每个学生的四个考试成绩(而不是拔出名字),我会创建一个等式来找到平均值,这很容易。问题是,我不确定是谁从阵列中取出所有测试分数,所以我可以这样做......
public class StudentGradesView extends FrameView {
int [][] aryStudent = new int [15][4]; // [15] being # of students, [4] for test scores
String[] studentNames = new String[15]; //this isn't being used now...
int numOfStudents = 0; //listing the students starts off from 0...
int marks = 0; //might be needed for grabbing out test scores for finding average?
int test1;
int test2;
int test3;
int test4;
public StudentGradesView(SingleFrameApplication app) {
//unimportant...for GUI...
}
private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {
aryStudent[numOfStudents][0] = Integer.parseInt(test1Field.getText());
aryStudent[numOfStudents][1] = Integer.parseInt(test2Field.getText());
aryStudent[numOfStudents][2] = Integer.parseInt(test3Field.getText());
aryStudent[numOfStudents][3] = Integer.parseInt(test4Field.getText());
StringBuilder sb = new StringBuilder();
//The following is the code that list the students and their grades...this code should be fine..
for (int x=0; x <= numOfStudents && x<15; x++) {
sb.append(firstNameField.getText() + " " + lastNameField.getText());
for (int y=0; y < 4; y++) {
sb.append(" " +aryStudent[x][y]);
// studentListField.setText("" + firstNameField.getText() + " " + lastNameField.getText() + " " + aryStudent[numOfStudents][y] + "\n" + currentList);
}
sb.append("\n");
}
studentListField.setText(sb.toString());
numOfStudents ++;
}
private void classAverageButtonActionPerformed(java.awt.event.ActionEvent evt) {
“int schoolAverage =(test1 + test2 + test3 + test4)/ 4;” //这是我希望的工作......但输出后总是为零。所以我想我没有正确地将测试分数从阵列中拉出来。所以我尝试了一个类似于我上面所做的循环......到现在为止,我在黑暗中迷失了。
for (int x=0; x <= numOfStudents && x<15; x++) {
for (int y=0; y < marks && y <4; y++) {
averageField.setText("" + /** I'm unsure what to do here */ );
}
}
numOfStudents ++;
marks++;
// studentListField.getText(averageField.setText(""));
}
答案 0 :(得分:0)
你的代码几乎是正确的 - 但你只需要一个for循环。有点像:
for(int x = 0; x < numOfStudents && x<15; x++) {
averageField.setText((aryStudent[x][0] + aryStudent[x][1] + aryStudent[x][2] + [aryStudent[x][3])/4);
}
这将调用averageField.setText() numOfStudents 次。在aryStudent [ x ] [ y ]中,您可以区分使用 x 的学生和使用 y 的成绩。< / p>
由于成绩的数量是固定的(每个学生四个),您可以直接参考每个年级(aryStudent [ x ] [0]为 xths 学生&#39 ; s一年级,aryStudent [ x ] [1]为第二年级,依此类推......)
另外,请记住,数组是零索引的(一个五元素数组,将是0,1,2,3,4而不是1,2,3,4,5)所以如果你是从#in; x = 0并测试x&lt; = numOfStudents,你的循环将迭代numOfStudents + 1次,可能导致ArrayIndexOutofBoundsException。