如何从多维数组中提取值?

时间:2013-04-25 19:25:03

标签: java arrays loops

使用多维数组对我来说是第一次,所以我对这些数组附带的一些方面的理解有点......含糊不清。现在快速回顾一下这个程序将在完成后使用的内容......

这将允许教师输入学生的姓名和四个相应的考试成绩。他们最多可以列出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(""));

    }

1 个答案:

答案 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。