不确定addRating和getAverage方法是否正确

时间:2016-01-25 13:27:42

标签: java

设计一个包含有关电影信息的类电影。该类具有以下属性(成员变量):

  • 电影名称
  • MPAA评级(例如,G,PG,PG-13,R)
  • 将此电影评为1(可怕)的人数
  • 将此电影评为2(差错)的人数
  • 将此电影评为3(OK)
  • 的人数
  • 将此电影评为4(好)的人数
  • 将此电影评为5(很棒)的人数

该类应具有以下成员函数:

  • 一个构造函数,允许程序员创建具有指定名称和MPAA评级的对象。在此构造函数中,应将电影评级的人数设置为0。
  • 电影名称和MPAA评级的访问者和变异函数
  • 一个函数addRating,它接受一个整数作为输入参数。该函数应验证参数是否为1到5之间的数字,如果是,则增加为电影评级与输入参数匹配的人数。例如,如果3是输入参数,那么将电影评为3的人数应增加1.
  • 一个函数getAverage,它返回所有电影评级的平均值

当我运行该程序时,它没有显示正确的平均值,例如,如果我将ice-age评为3和4,它的平均值应该是3.5,而是它给出了我的最后一个等级,即4。是我的两种方法:

public static void addRating(int rating)
{
    Scanner keyboard = new Scanner(System.in);
    movieRating = rating;

    numberOfPeopleRated = 0;
    switch(movieRating)
    {
        case 1:
            numberOfPeopleRated++;
            break;
        case 2:
            numberOfPeopleRated++;
            break;
        case 3:
            numberOfPeopleRated++;
            break;
        case 4:
            numberOfPeopleRated++;
            break;
        case 5:
            numberOfPeopleRated++;
            break;
    }

    System.out.println("You rated " + movieName + " a " + movieRating);
}

public static void getAverage()
{
    totalMovieRating += movieRating;
    double averageRating = totalMovieRating / numberOfPeopleRated;
    System.out.println("The average Rating is " + averageRating);
}

1 个答案:

答案 0 :(得分:1)

你在那里遇到了一些语义(逻辑)错误。

  1. numberOfPeopleRated每次都设为0。
  2. 交换机是多余的
  3. 您将movieRating添加到totalMovieRating错误的地方!
  4. 在计算平均值(双整数转换问题)时必须小心
  5. 修正后的版本看起来有点像这样:

    public static void addRating(int rating) {
        if (rating >= 1 && rating <= 5) {
            numberOfPeopleRated++;
            totalMovieRating += rating;
            System.out.println("You rated " + movieName + " a " + rating);
        } else {
            System.out.println("Wrong rating");
        }
    }
    
    public static void getAverage() {
        double averageRating = ((double)totalMovieRating) / numberOfPeopleRated;
        System.out.println("The average Rating is " + averageRating);
    }