我甚至远程做这个吗? Java方法

时间:2011-10-15 02:41:36

标签: java methods

手头的任务:考虑一个class ratingScore,它代表一些事物的数字评级,例如移动。属性:对评级内容的描述,最大可能评级,评级。

它将有以下方法:从ta用户获得评级,返回最高评级posisble,返回评级,以适合显示的格式返回显示评级的字符串。

一个。为每个方法编写一个方法标题 湾为每种方法编写前后条件 C。写一些java语句来测试类 d。实施课程。

我想我做了我应该做的事情,但这是一种方法,我不确定我是否有足够的空间让它改变很多,这是我到目前为止所做的。

import java.util.*;
public class MovieRating 
{
    // instance variables
    private String description = " A movie that shows how racism affect our lives and choices";
    private int maxRating = 10;
    private int rating;

    // methods 

    //precondition: Must have maxRating, rating and description before you post it back to the user.
    //rating between 1 and 10, maxRating is set to 10, description of a movie
    public void writeOutput()
    {
        System.out.println("The max rating is: " + maxRating );
        System.out.println("Your rating is: " + rating );

        System.out.println("The rating for" + description + " is " + rating); 
        System.out.println("while the max rating was " + maxRating);
    }

    // PostCondition: Will write maxRating, rating and description to the user.

    //Precondition: description, enter the rating
    public void readInput()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("What would you rate the movie \"American History x\" out of ten");
        System.out.println(description);
        rating = keyboard.nextInt();
    }
    //postcondition: rating will be set to user's input for the movie American History x.



}

这是我的Tester计划..目前还不多

public class MovieRatingTester 
{
    public static void main(String[] args)
    {

        //object of the class MovieRating
        MovieRating rating1 = new MovieRating();

        rating1.readInput();

        rating1.writeOutput();

    }

}

我是否覆盖了被告知的内容?我想我做了,但我想我做错了,请让我知道。

3 个答案:

答案 0 :(得分:1)

您不应该从Ratings类中询问/打印数据。这些评级可以来自用户输入,也可以来自数据库,网络等。

1为MovieRating的属性添加getter和setter

2将读写方法传递给main。像

这样的东西
 System.out.println("The rating for the movie |" + rating1.getTitle() + "| is " + rating1.getRating());

3您没有将评分汇总到电影中。您不能同时对同一部电影(例如,不同用户)进行两次评分。将rating属性转换为Vector以解决它。更改setRating

addRating

还有很多其他的东西,但显然这是一个初学者练习,我不希望你感到困惑。处理这些问题并与老师核实。

答案 1 :(得分:1)

好的,我的观点是:

你的课,MovieRating缺少OOP的一些基本元素,这就是我认为你想在这个作业中学到的东西。

缺少的第一个元素是构造函数方法,你所做的是自动为每个新的MovieRating分配相同的描述。构造函数的作用是在首次在系统中构建Object时为其提供唯一值。

构造函数方法很特殊,它是公共的,并且具有与类完全相同的名称,正如我们所说,在这种方法中,您可以为对象变量赋值。

第二件事就是放置getter / setter,这些方法可以访问您的私有值,并将用于分配/获取它们的值。请注意在代码中使用它们:

import java.util.*;
public class MovieRating 
{

// instance variables
private String description;
private int maxRating;
private int rating;

/*This is the constructor
  Note the use of .this - the expression is used to call the class form withing  
  itself*/
public MovieRating(String description, int maxRating, int rating) {
    this.setDescription(description);
    this.setMaxRating(maxRating);
    this.setRating(rating);
}

/*These are the getters and setters - get is used for getting the value
  and set is used for assigning a value to it*/
public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public int getMaxRating() {
    return maxRating;
}

public void setMaxRating(int maxRating) {
    this.maxRating = maxRating;
}

public int getRating() {
    return rating;
}

public void setRating(int rating) {
    this.rating = rating;
}

//This is a method for the printing commands - notice the use of the get methods//
public void printRatings()
{
    System.out.println("The max rating is: " + this.getMaxRating() );
    System.out.println("Your rating is: " + this.getRating() );

    System.out.println("The rating for" + this.getDescription() + " is " + 
                        this.getRating()); 
    System.out.println("while the max rating was " + this.getMaxRating();
    }

// PostCondition: Will write maxRating, rating and description to the user.

/*Precondition: description, enter the rating
  Note the use of this.setRating()*/
public void readInput()
{
    Scanner keyboard = new Scanner(System.in);
    System.out.println("What would you rate the movie \"American History x\" out of ten");
    System.out.println(description);
    this.setRating(keyboard.nextInt());
}
//postcondition: rating will be set to user's input for the movie American History x.

}

使用构造函数,您可以从测试程序创建不同的评级

MovieRating rating1 = new MovieRating("description 1", 10, 5);
MovieRating rating2 = new MovieRating("description 2", 9, 7);

答案 2 :(得分:0)

Java(以及一般的OO)都是关于抽象的。您希望尽可能保持对象的通用性,以便在不修改现有代码的情况下扩展程序功能。这可能超出了教授所寻求的范围,但这是我的建议:

1)评级 - 将其分为自己的班级 再次,评级与电影完全分开 - 歌曲可以有收视率,电视节目可以有收视率。今天收视率可以是1-10,明天收视率可以竖起大拇指或大拇指向下等。电影“有”评级。让评级决定如何提示用户以及如何展示自己。

2)现在你有一个单独的Movie类,我会在我的Movie类中删除硬编码的标题,描述(这将让我创建很多电影并对它们进行评级)。

然后我会在writeOutput方法中消除Sys​​tem.out.println(你可以将OutputStream传递给函数) 通过在System.in中进行硬编码,您正在强制实施。如果明天你的教授说“现在,而不是打印到控制台,打印到文件或数据库”,该怎么办?你必须修改代码。实际上,我将覆盖所有对象所具有的toString方法,而不是writeOutput,而只是在main中调用System.in(movie.toString())。

3)你的测试方法没有“测试”任何东西 - 它只是执行一个语句。通常,测试方法将模拟输入,执行语句,并在最后检查正确的状态。一个表示状态不合适的好方法(如果你的测试失败,比如你的电影评级是-1),那么你就会抛出异常。

4)这是与OO无关的,只是一种偏好,但我会在方法之前放置Pre和Post条件。这让我更容易找到。

OO的想法是将责任/顾虑分成不同的类。每个班级都对自己负责。这有助于保持代码更加灵活和可维护。祝你好运!