2012-03-02 75 views
1

好,所以這是我正在處理的任務:無法在Java中創建類。不知道在某些方法

「實現班學生(你可以使用你創建的實驗室並添加到它)。到其他任何屬性,這個學生對象將會有一個完整的測驗分數,一定要寫出一個完整的類(即合適的屬性,構造函數,訪問器和增變器)

其他需要的方法是:addQuiz int score),showStudentInfo()和getAverageScore()。注意,爲了計算平均值,這個類需要知道測驗的次數 驅動器/測試器類將創建三(3)個學生對象,每個學生對象的方法將被稱爲五次s增加五(5)個測驗成績。

我建議您使用隨機類來生成測驗值,而不是硬編碼它們。然後驅動程序調用學生的方法來顯示學生的姓名,全部五個測驗成績以及測驗的平均分數。 「

我對需要做什麼有一個基本概念,但我只是不確定某些方法,例如」getAverageScore「方法就是我遇到的問題,甚至我也可以如果我剛剛在測試程序開始時初始化它們,需要使用獲取和設置年齡名稱和主要方法的方法嗎?有什麼需要添加或修復的幫助,我非常感謝。迄今爲止:

import java.util.Random; 

public class Student 
{ 
    private int Age; 
    private String Name; 
    private String Major; 
    private int Score; 

    public Student(String n, int a, String m) 
    { 
    Name = n; 
    Age = a; 
    Major = m; 
    } 

    public String showStudentinfo() 
    { return (Name + " " + Age + " " + Major + "\n"); 
    } 

    public int addQuiz() 
    { Score = randomNumbers.nextInt(101); 
    return Score; 
    } 

    public int getAverageScore() 
    { 
    } 

    //setter methods 
    public void setAge(int a) 
    { Age = a; 
    } 
    public void setName(String n) 
    { Name = n; 
    } 
    public void setMajor(String m) 
    { Major = m; 
    } 

    //getter methods 
    public int getAge() 
    { return Age; 
    } 
    public String getName() 
    { return Name; 
    } 
    public String getMajor() 
    { return Major; 
    } 
} 

回答

0

你需要存儲的測驗成績的地方。你的教授說會有不止一個。在「學生」構造函數上方,添加一個大小爲5的數組或ArrayList。我會用一個Array,這一點,所以:

private int[] scores = new int[5]; 

然後在你的方法得到的分數,將它們添加到陣列與一個循環:

public void addQuiz() { 
    for(int i = 0; i < 5; i++){ //Loops through and adds 5 scores 
    int score = randomNumbers.nextInt(101); 
    scores[i] = score; 
    } 
} 

那麼你應該能夠計算平均分數加入檔次在一起,並通過5將它們劃分:

public int getAverageScore() { 
    int totalScore = scores[0] + scores[1] + scores[2] + scores[3] + scores[4]; 
    int avgScore = totalScore/5; 
    return avgScore; 
} 

我沒有實際測試此代碼,而我是一個初學者自己,但希望這讓你在正確的軌道上。 :)

+0

很高興幫助你,謝謝:) – Jedibassist 2012-03-02 23:09:03

0

它大部分看起來不錯,但有幾個問題,主要是風格相關(也許有點主觀)。

1)您不會隨機初始化隨機數。

2)變量名稱應以小寫字母開頭。大寫字母的名字通常保留給類。

3)不要使用單字母變量名稱,即使是參數。他們討厭和晦澀的信息。使用更多的信息,如setAge(int newAge)。

4)這聽起來像是他們希望你存儲所有測試分數的總和(這很奇怪,但嘿),然後計算平均值。爲了從總和中獲得平均值,您需要知道總和中包含多少測試,因此您必須跟蹤某個地方並相應地增加它。在addQuiz中,您現在只需跟蹤最近測驗的得分。

5)不要在{,它很醜陋的同一行上啓動函數的主體。

0

爲了使getAverageScore()正常工作,您需要記錄單個分數。你可以做一些事情,比如使用ArrayList<Integer>併爲他們添加單獨的分數。 (或者,您可以保留avgScore屬性以及numOfTests屬性,然後計算新的平均值 - 但如果您希望平均值爲int,則隨着時間的推移這可能會變得更加不準確)。

這是部分的依賴於ArrayList<Integer>的解決方案。我在這裏假設你的方法簽名是正確的,並且你實際上不想返回doublefloat(即你將不得不捨去得分)。

public int getAverageScore() { 
    float sum = 0.0; // so rounding works, integer division truncates 
    // in case you're not familiar with it, 
    // read the following line as "for each score in scoreList" 
    for (Integer score : scoreList) { // scoreList is of type ArrayList<Integer> 
     sum = sum + score; 
    } 
    return Math.round(sum/scoreList.size()); 
} 

現在,我不告訴你如何正確地實現scoreList,因爲這是家庭作業,你應該還在做一些它的自己。提示:您不能在ArrayList中使用原始類型(如int),您需要改爲存儲Integer。您可以使用new Integer(int value)創建一個特定值的整數。相反,如果您知道會有固定數量的分數,則可以使用int陣列。

要使此解決方案起作用,您需要添加scoreList屬性,並且您需要更改addQuiz()的工作方式。

0

字段應以小寫字母開頭。安裝者不是強制性的,它只取決於它是否合理。 Methos addQuiz應該將int作爲參數,並且應該有一個int int numberOfQuizzes字段。每次添加測驗分數時,應該增加該字段。平均得分然後就總的分數通過測驗

數除以
+0

好吧,對於「numberOfQuizzes」方法,我是否可以在測試人員中稱之爲將每個學生的隨機測驗等級添加到測試中?在測試中,我使用while循環爲每個學生調用「addQuiz」5次,但是如何將它保存在numberofQuizzes方法中? – Andrew 2012-03-02 22:29:23

+0

使用上面建議的數組列表,它的更清潔。 – 2012-03-02 22:31:22

0

你必須保持所有得分,並採取測驗次數的總和,所以加2場,sumOfQuizGradescountOfQuizGrades,和方法addQuiz添加等級和增加計數。

順便說一句,不要改變的簽名addQuiz它一定不能保持它內的隨機,隨機應該添加在main方法中。