2011-10-15 55 views
0

手頭的任務:考慮一個類ratingScore,它表示諸如移動等某些事物的數字評分。屬性:描述什麼是評分,最大可能評分,評分。我是否會遠程執行此操作? Java方法

它將具有以下方法:從ta用戶獲取評分,返回最大評分posisble,返回評分,返回顯示適合顯示格式的評分的字符串。

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(); 

    } 

} 

所以沒我什麼蓋被告知有哪些?我想我做了,但我認爲我做錯了,請讓我知道。

回答

1

好吧,我的觀點是:

你的類,MovieRating缺少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); 
+0

嘿,我不是故意嘮叨,好吧,我明白getRating是幹什麼的,如果你把它放在主文件中,它會返回評分的值嗎?我有一點麻煩是this.rating =評級。那是否將評分設置爲別的?所以以前的評級是10,setRating(15)將它設置爲15是否正確?最後一件事是什麼?這個.setDescription(描述); this.setMaxRating(maxRating); this.setRating(rating); 的意思是在構造函數下。 – Renuz

+0

你不是一個嘮叨。 'this.'正在調用「這個」類。它在呼喚自己。所以當你從構造函數中調用'this.setRating'時,實際上是從構造函數調用該類的'setRating()'方法,並根據你的想法從中分配一個值。構造函數中的另一個'this.'對於類的不同變量的功能是相同的。你明白了嗎 ? –

+0

是的,我相信如此,但我對方法很陌生,他們現在對我很困惑,你會如何使用諸如getMaxRating或setMAxRating之類的方法說出執行的程序,還是僅用於程序的主要部分。或者,我們是在創建程序的主要部分中使用的命令,這就是爲什麼它們應該是一般的而不是特定的。 – Renuz

1

您不應該要求/打印評級課程的數據。這些評級可以來自用戶的輸入,也可以從數據庫,Web等

1添加getter和setter MovieRating

的性能

2遍的讀取和寫入方法爲主。類似於

System.out.println("The rating for the movie |" + rating1.getTitle() + "| is " + rating1.getRating()); 

3您並未將收視率彙總到電影中。您不能對同一部電影(例如,由不同的用戶)進行兩次評分。將rating屬性轉換爲Vector來解決它。更改setRatingaddRating

還有很多其他的事情,但顯然這是一個初學者練習,我不想讓你感到困惑。處理這些問題並與你的老師覈對。

+0

一般來說,將用戶界面與數據類分開是非常好的做法。 – SJuan76

0

的Java(和一般OO)創建一個不同的評級所有關於抽象。您希望保持對象儘可能通用,以便在不修改現有代碼的情況下擴展程序功能。這可能超出了你的教授尋找的內容,但這裏有我的建議:

1)評分 - 把它分成它自己的類 再次,評級是完全獨立於電影 - 歌曲可以有收視率,電視節目可以有評級。今天的評分可以是1-10,明天的評分可以是豎起大拇指或拇指向下等。電影「有」評級。讓評級決定如何提示用戶以及如何顯示自己。

2)現在你有一個單獨的電影類,我會拿走硬編碼的標題,在我的電影類的描述(這將讓我創造許多電影和評分)。

然後,我會消除writeOutput方法中的System.out.println(您可以將OutputStream傳遞給函數) 通過在System.in中進行硬編碼,您正在強制執行。如果明天你的教授說「現在,而不是打印到控制檯,打印到文件或數據庫」呢?你必須修改代碼。實際上,而不是writeOutput,我會覆蓋所有對象具有的toString方法,然後在main中調用System.in(movie.toString())。

3)你的測試方法不會「測試」任何東西 - 它只是執行一個語句。通常,測試方法將模擬輸入,執行語句,並在最後檢查適當的狀態。一個很好的方式來表明狀態不正確(如果你的測試失敗了,比如你的電影評級是-1),那麼你會拋出異常。 4)這與un-OO有關,只是一個偏好,但我會在方法之前放置Pre和Post條件。這只是讓我更容易找到我的意見。

面向對象的理念是你將責任/關注分爲不同的類。每個班級都對自己負責。這有助於保持代碼更加靈活和可維護。祝你好運!

相關問題