2014-11-07 78 views
0

我無法通過傳遞參數來指定對象的特定屬性來更改該屬性。對於對象以及它們是如何工作的,我有點新鮮。我需要爲此使用對象,因爲它是一項任務。無法將參數傳遞給對象java

該計劃的目的是基本上將成績存儲在電子成績冊中。但是,我有一個充滿名稱和測驗成績的虛擬學生的對象。我需要創建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

爲每個學生屬性創建getter和setter。我相信這就是你的老師期望你做的事 – DnR 2014-11-07 01:09:10

+0

@DnR:這並不涉及基於索引訪問測驗。 – 2014-11-07 01:10:39

回答

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 []成員,但它不應該! 這個數組應該在另一個沒有被繼承的類中。它被稱爲StudentList或類似的東西。

編輯:回覆您的評論。如果您需要準確地訪問的成績,你說,我想到的唯一的解決辦法是:

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 +走開。當然,並非所有的老師都喜歡這一點,爲了保持安全,您可能需要準備多個答案 - 特定的答案和好的答案。

+0

這真的很好,我很欣賞它,但是我需要堅持最初在對象中分配成績,而不是如何獲得成績,因爲這是一項任務。 – LordValkyrie 2014-11-07 01:34:59

+0

非常感謝幫助。你第二次放置它的方式應該工作得很好。我想我現在明白了一點 – LordValkyrie 2014-11-07 03:09:42

0

如果你想通過索引訪問一組東西,你想使用一個數組,所以你可以使用像q[quiz]這樣的東西。

+0

處理對象的屬性時可以這樣做嗎? – LordValkyrie 2014-11-07 01:06:51

+0

使'q'成爲'int'的數組,這是對象的屬性。 – 2014-11-07 01:07:52

+0

對不起,對於愚蠢的問題,但我將如何從一個對象內填充數組,似乎無法弄清楚。 – LordValkyrie 2014-11-07 01:29:54

相關問題