0

好的,这将是一个列出学生姓名和考试成绩的程序。我已经弄清楚了,但只有一件小事。我必须列出学生姓名的行...然后允许我将另一个学生添加到列表中,而不会重复完全相同的姓名。(见标有 1 和 2 的行)

第一行从 firstNameField 和 lastNameField 中收集教师将输入的姓名……第二行将“上升一个”作为数组,以确保在添加另一个学生时名称不会重复。

不幸的是......每次添加另一个学生时,它看起来有点像这样......

例子:

简·杜努尔 65 76 45 89 简·杜努尔 65 87 45 76 约翰·史密斯努尔 65 76 45 89

你可以清楚地看到问题......“null”在那里,加上重复第二个名字(Jane Doe)

那么我应该怎么做才能防止这种情况发生呢?

公共类 StudentGradesView 扩展 FrameView {

int [][] aryStudent = new int [15][4]; //number of student (15) test scores (4 scores)
String[][] aryNames = new String[15][2]; //lists the names of students
int numOfStudents = 0; //starts off students from zero...
int marks = 0; 

int test1;
int test2;
int test3;
int test4;

public StudentGradesView(SingleFrameApplication app) {

//图形界面的东西...

private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {                                          

    String currentList = studentListField.getText();

    //Collects integers from test1Field though test4Field
    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();


    for (int x=0; x <= numOfStudents && x<15; x++) {
        sb.append(firstNameField.getText()).append(" ").append(lastNameField.getText()); //(1)
        sb.append(aryNames[x][0]); //(2)
        for (int y=0; y < 4; y++) {
            sb.append(" ").append(aryStudent[x][y]);
            studentListField.setText(sb.toString() + "\n" + currentList);
        }
        sb.append("\n");

    }
    numOfStudents ++;
}  

添加: 所以它看起来 "sb.append(aryNames[x][0]); //(2)" 没有什么意义,没有它没有名称重复,除非它输出为...示例

玛丽·琼斯 56 76 56 87 约翰·史密斯 45 45 45 45 约翰·史密斯 45 45 45 45

因此,它重复添加了两次的第二个名称。

4

1 回答 1

0

您将数据放入 aryNames 的什么位置?

你初始化它:

String[][] aryNames = new String[15][2]; //lists the names of students

然后你使用它:

sb.append(aryNames[x][0]); //(2)

但它在哪里居住?这是您唯一一次引用它,并且就在您附加名称之后。所以你得到空

来自:

sb.append(firstNameField.getText()).append(" ").append(lastNameField.getText()); //(1)

但是,如果aryNames从未有任何数据放入其中,aryNames[x][0]则将为空,因此将附加空。

所以我会检查你在哪里填充aryNames数组。

于 2013-04-29T18:15:09.637 回答