我做得对吗?Java方法

我做得对吗?Java方法,java,methods,Java,Methods,手头的任务:考虑一个班级评分分数,它表示某件事情的数值评分,比如一次移动。属性:描述被评级的内容、最大可能评级、评级 它将有以下方法:从ta用户处获取评级,返回最大评级,返回评级,返回一个字符串,以适合显示的格式显示评级 a。为每个方法写一个方法标题 B为每个方法编写前置和后置条件 C编写一些java语句来测试类 D实现这个类 我想我做了我应该做的,但这是一种方法,我不确定我是否有足够的空间来改变它,这就是我目前所拥有的 import java.util.*; public class Movi

手头的任务:考虑一个班级评分分数,它表示某件事情的数值评分,比如一次移动。属性:描述被评级的内容、最大可能评级、评级

它将有以下方法:从ta用户处获取评级,返回最大评级,返回评级,返回一个字符串,以适合显示的格式显示评级

a。为每个方法写一个方法标题 B为每个方法编写前置和后置条件 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.



}
这是我的测试程序。。到目前为止还不多

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

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

        rating1.readInput();

        rating1.writeOutput();

    }

}

那么,我是否涵盖了要求涵盖的内容?我想我做了,但我认为我做得不对,请让我知道。

你不应该要求/打印评级课的数据。这些评级可以来自用户输入,也可以来自数据库、web等

1为MovieRating属性添加getter和setter

2将读取和写入方法传递给main。差不多

 System.out.println("The rating for the movie |" + rating1.getTitle() + "| is " + rating1.getRating());
3您没有将收视率汇总到一部电影。不能同时对同一部电影(例如,由不同的用户)进行两次分级。将
评级
属性转换为向量以求解它。更改
addRating
setRating


还有很多其他的事情,但很明显,这是一个初学者练习,我不想让你们感到困惑。解决这些问题,并与您的老师核实。

好的,我的观点是:

你们的课,电影缺少OOP的一些基本元素,这就是我认为你们应该在这个家庭作业中学习的

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

构造函数方法是特殊的,它是公共的,与类的名称完全相同,正如我们所说的,在这个方法中,您假设为对象变量赋值

第二件事是放置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);
Java(以及一般的OO)都是关于抽象的。您希望尽可能保持对象的通用性,以便在不修改现有代码的情况下扩展程序功能。这可能超出了您的教授的期望,但以下是我的建议:

1) 评级-将其划分为自己的类别 同样,收视率与电影完全不同——歌曲可以有收视率,电视节目可以有收视率。今天的收视率可以是1-10,明天的收视率可以是竖起大拇指或竖起大拇指,等等。一部电影的收视率为“A”。让评级决定如何提示用户以及如何显示自己

2) 现在您有了一个单独的电影类,我将去掉电影类中硬编码的标题和描述(这将让我创建许多电影并对它们进行评级)

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

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

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


OO的思想是将职责/关注点划分为不同的类。每个班级都对自己负责。这有助于使代码更加灵活和可维护。祝你作业顺利

一般来说,将用户界面与数据类分开是一种很好的做法。嘿,我不是故意唠叨,好吧,我理解getRating的作用,如果你把它放在主文件中,它会返回评级的值,对吗?我遇到的一点小麻烦是这个。评级=评级。这是否将评级设置为其他值?所以之前的评级是10,setRating(15)会将其设置为15,对吗?最后一件事是{this.setDescription(description);this.setMaxRating(maxRating);this.setRating(rating);在构造函数下是什么意思。你不是一个唠叨的人。
this。
正在调用“this”因此,当您从构造函数调用
this.setRating
时,实际上是在调用
setRating()
类的方法,来自构造函数,并按照您的计算从中赋值。另一个
来自构造函数。
对于类的不同变量,它们的功能是相同的。您明白吗?是的,我相信是这样,但我对方法是新的,它们现在让我很困惑,您如何使用它们比如说执行的程序的getMaxRating或setMAxRating,或者它只是程序的主要部分。或者是我们正在创建用于程序主要部分的命令,这就是为什么它们应该是通用的而不是特定的。别担心,在开始学习OOP时感到困惑是正常的。编写代码越多,