使用多维数组对我来说是第一次,所以我对这些数组附带的一些方面的理解有点......含糊不清。现在快速回顾一下这个程序将在完成后使用的内容......
收集输入的学生姓名和四个相应的考试成绩。你可以找到学校的平均值,现在我试图找到每个学生的平均值。
public class StudentGradesView extends FrameView {
int [][] aryStudent = new int [15][4]; // [15] being max students [4] being # of test scores
String[] studentNames = new String[15];
int numOfStudents = 0; //student names start from 0...
int marks = 0;
int test1;
int test2;
int test3;
int test4;
public StudentGradesView(SingleFrameApplication app) {
//unimportant...for GUI
}
private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {
//这很好......只需收集名称和测试分数,然后将它们记录在studentListField中......
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() + " " + lastNameField.getText());
for (int y=0; y < 4; y++) {
sb.append(" " + aryStudent[x][y]);
}
sb.append("\n");
}
studentListField.setText(sb.toString());
numOfStudents ++;
}
private void classAverageButtonActionPerformed(java.awt.event.ActionEvent evt) {
//找到学校平均水平......很好
for(int x = 0; x < numOfStudents && x<15; x++) {
averageField.setText("The class average is " + (aryStudent[x][0] + aryStudent[x][1] + aryStudent[x][2] + aryStudent[x][3])/4 + "%");
}
}
private void studentAverageButtonActionPerformed(java.awt.event.ActionEvent evt) {
但是呢!这......我认为这会单独列出学生的平均成绩,但它一次只输入一个学生,这是一个问题...所有它需要做的就是列出类似于此...
约翰史密斯78 Jane Doe 80 等等
for (int i = 0; i < numOfStudents; i++) {
for (int y = 0; y < marks; y++) {
averageField.setText("Student" + (aryStudent[y][0] + aryStudent[y][1] + aryStudent[y][2] + aryStudent[y][3])/4);
}
}
marks++;
}
答案 0 :(得分:0)
最后一段代码中的变量marks
到底是什么?它在循环之外,所以实际上并没有做任何事情。我希望你的代码可以做的,例如,有4名学生和标记是3将是以下
(i = 0 y = 0),StudentA
(i = 0 y = 1),StudentB
(i = 0 y = 2),StudentC
(i=1 y=0), StudentA <AVG>
(i=1 y=1), StudentB <AVG>
(i=1 y=2), StudentC <AVG>
(i=2 y=0), StudentA <AVG>
(i=2 y=1), StudentB <AVG>
(i=2 y=2), StudentC <AVG>
....
尝试首先以文本模式打印结果(不使用任何GUI)。当它在那里工作时,你可以转到GUI。
答案 1 :(得分:0)
您的指数似乎不正确。您正在使用y
,即标记索引作为学生索引,i
未使用。此外,你的方式,你不需要2个循环。
如果您为学生命名i
s
,并为y
m
命名,则可能会避免此问题。
此外,通过使用setText
,您可以替换文字,而不是添加文字。假设您使用JTextArea
,则应使用append
代替。
应该看起来像:
averageField.setText(""); // clear
for (int s = 0; s < numOfStudents; s++)
averageField.append(studentNames[s] + " - " + (aryStudent[s][0] +
aryStudent[s][1] + aryStudent[s][2] + aryStudent[s][3])/4 + "\n");
更通用的方式:
averageField.setText(""); // clear
for (int s = 0; s < numOfStudents; s++)
{
int average = 0;
for (int m = 0; m < marks; m++)
average += aryStudent[s][m];
average /= 4;
averageField.append(studentNames[s] + " - " + average + "\n");
}
请注意,您的课程平均值似乎也不正确。它目前仅显示最后一位学生的平均成绩(setText
也会随时替换)。
这样的事情应该有效:
int average = 0;
for (int s = 0; s < numOfStudents; s++)
for (int m = 0; m < marks; m++)
average += aryStudent[s][m];
average /= numOfStudents * marks;
averageField.setText("The class average is " + average + "%");
此外,不会(或不应该)numOfStudents
限制为15
,为什么要检查这两个值?