麻烦将参数传递给对象java

时间:2014-11-07 01:00:11

标签: java arrays object parameters

我在传递参数以指定对象的特定属性以更改该属性时遇到问题。我对物体及其工作方式有点新意。我需要为此使用对象,因为它是一项任务。

该计划的目的是基本将成绩存储在电子成绩簿中。但是,我有一个填充了假设学生的名字和测验等级的对象。我需要创建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?我需要在这里完全重新考虑我的结构吗?这是不好的做法吗?或者我是在正确的轨道上,只是错过了一些重要的东西?

提前致谢了。

2 个答案:

答案 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 +。当然并不是所有的老师都很欣赏这一点,所以为了保持安全,你可能需要准备多个答案 - 特定答案和好答案。