2017-09-17 10 views
-2

現在、Prog 2クラスの割り当てに取り組んでいます。これは、配列に格付けを格納し、格付けの平均をとるクラスムービーの作成を含みます。私はプログラムの大半をやっているが、私の平均が正しく印刷されていない理由を理解することができず、同じ値を得続けている。1次元配列の数値の平均を取る

さらに、「平均閲覧者評価」の後に数値を表示するのではなく、言葉を言いたいと思います。例えば、平均1は "恐ろしい"、2は "悪い"、3は "良い"、4は "良い"、5は "良い"となります。

私はC++をかなり新しくしているので、どんな指針も素晴らしいものになるでしょう。ありがとうございました!

私のクラスの宣言:

class Movie { 

private: 
    int rate[5]; 
    int ratings; 
    string movie; 
    string userRate[5] = {"Terrible","Bad","Okay","Good","Great"}; 
    string mpaa; 

public: 
    Movie(); 
    Movie(string title, string mpaaRating); 
    void setMPAA(string mpaaRating); 
    double getAverage(); 
    void addRating(int rating); 
    friend ostream& operator << (ostream &out, Movie &M); 
}; 

getAverage()関数:

double Movie::getAverage() 
{ 
    int total = 0; 

    for (int i = 0; i < 5; i++) 
    { 
     total += rate[i] * (i+1); 
     ratings++; 
    } 


    if (ratings > 0) 
     return total/ratings; 
    else 
     return 0; 
} 
メイン

int main() { 

    Movie A("Inception","PG-13"); 
    Movie B("Fear and Loathing in Las Vegas","PG-13"); 

    A.addRating(1); 
    A.addRating(3); 
    A.addRating(5); 
    A.addRating(5); 
    A.addRating(5); 

    B.addRating(3); 
    B.addRating(2); 
    B.addRating(1); 
    B.addRating(4); 
    B.addRating(5); 

    cout << A << endl; 
    cout << B << endl; 
} 

そしてOUTPUT

Movie: Inception 
MPAA Rating: PG-13 
Avg. Viewer Rating: 3 

Movie: Fear and Loathing in Las Vegas 
MPAA Rating: PG-13 
Avg. Viewer Rating: 3 
+1

なぜ '*(I + 1);'?また、 '<<"の実装はどこですか?デバッグをしましたか?彼らが間違っているかもしれない多くのことがあります、そして、あなたがそれを狭めるのを助けるのに十分なコードを含んでいません。 – Carcigenicate

+0

コードの一部を投稿しました。あなたは[mcve]を投稿できる方が良いでしょう。 –

答えて

0

整数除算を実行しているためです。変数を最初に浮動小数点に変換する必要があります。だから、変更:

return total/ratings; 

へ:

return float(total)/float(ratings); 
+0

私はそれがそれを解決するとは思わない。最初の映画の総合評価は19. 19/5 = 6.334でした。整数除算は3になることはありません。 – Carcigenicate

+0

それを解決しました! 19/5は3.8です。私はそれらを二重に変換するように変更し、それは動作します! –

+0

@DaneWindおっと、dur。計算機に間違って入力し、結果について考えなかった。私の悪い。 – Carcigenicate

関連する問題