我在传递参数以指定对象的特定属性以更改该属性时遇到问题。我对物体及其工作方式有点新意。我需要为此使用对象,因为它是一项任务。
该计划的目的是基本将成绩存储在电子成绩簿中。但是,我有一个填充了假设学生的名字和测验等级的对象。我需要创建setQuiz()方法来获取指定学生的指定测验值,然后将其更改为指定的成绩。这是我到目前为止所拥有的。
public class Student extends TestStudent
{
public String name;
public int q1, q2, q3, q4, q5;
public Student(String cName, int cq1, int cq2, int cq3, int cq4, int cq5 )
{
name = cName;
q1 = cq1;
q2 = cq2;
q3 = cq3;
q4 = cq4;
q5 = cq5;
}
public void setQuiz(int grade, int quiz, int student)
{
super.studentAr[student].{quiz?} = grade;
//Basically, I am not sure how to reference the exact grade I need
//to access, thus the question mark.
}
}
那我该怎么办,StackOverflow?我需要在这里完全重新考虑我的结构吗?这是不好的做法吗?或者我是在正确的轨道上,只是错过了一些重要的东西?
提前致谢了。
答案 0 :(得分:0)
如果要通过索引访问一组内容,则需要使用数组,因此可以使用q[quiz]
之类的内容。
答案 1 :(得分:0)
通过这种结构,您可以访问每个测验的唯一方法是具体参考测验。你不能只传递一个测验号码。你必须这样做:student.q1,student.q2等。
另一件没有意义的事情是你将学生的索引传递给你的setQuiz方法。此方法已经属于学生对象,并且只有一个可以影响的对象,这本身就是它。您需要选择在您调用它的任何位置调用setQuiz方法的学生。
编辑:更改构造函数以初始化所有成绩。
创建课程的更好方法如下:
public class Student extends TestStudent
{
public String m_name;
public int[] m_grades;
public Student(String cName, int q1, int q2, int q3, int q4, int q5)
{
m_grades = new int[5];
m_grades[0] = q1;
m_grades[1] = q2;
m_grades[2] = q3;
m_grades[3] = q4;
m_grades[4] = q5;
}
public void setQuiz(int grade, int quiz, int student)
{
if (quiz > 0 && quiz <= num_quizzes && grade >= 0 && grade < MAX_GRADE) //Always check yout inputs!!
{
super.studentAr[student].m_grades[quiz-1] = grade;
}
}
}
然后你可以在外面使用它:
Student josh = new Student("Josh", 10, 20, 30, 40, 50);
josh.setQuiz(51, 1);
josh.setQuiz(60, 2);
josh.setQuiz(20, 3);
或者你想要使用它......由你决定!
另一个说明。当您调用super时,在这种情况下,您正在访问TestStudent类上的数组。我没有看过这堂课,我不知道它是否有一个studentAr []成员,但它不应该! 这个数组应该在另一个不被继承的类中。它被称为学生列表或类似的东西。
编辑:回复你的评论。如果您需要完全按照您的说明访问成绩,那么您想到的唯一解决方案是:
public void setQuiz(int grade, int quiz, int student)
{
if (quiz == 1)
super.studentAr[student].q1 = grade;
if (quiz == 2)
super.studentAr[student].q2 = grade;
if (quiz == 3)
super.studentAr[student].q3 = grade;
if (quiz == 4)
super.studentAr[student].q4 = grade;
if (quiz == 5)
super.studentAr[student].q5 = grade;
}
但请注意,这是一种相当糟糕的做事方式。当我被交给这样的作业时,我通常试图做正确的事,给老师留下深刻的印象,然后走开了A +。当然并不是所有的老师都很欣赏这一点,所以为了保持安全,你可能需要准备多个答案 - 特定答案和好答案。