使用compareTo在java上进行简介编程

时间:2016-02-25 04:43:08

标签: java

我从朋友那里得到了一些计算机科学,我相信它是编程任务的介绍,我正在尝试它,但似乎有很多问题,似乎我主修CS,有人可以帮助我一步一步的问题,将不胜感激。在说明中如下:

使用私有实例变量创建公共类Movie。字符串标题 和int年。该类应声明它实现了 可比较的界面,应该提供以下内容:

•带有2个参数的构造函数:String和int(按此顺序)
用于初始化标题和年份。

•满足Comparable接口的方法。电影应首先按标题进行比较,然后逐年进行比较。

{Maltese Falcon 1941,The Thomas Crown Affair 1968,The Thomas Crown Affair 1999}

与满足该方法的方法兼容的equals()方法 可比的界面。

•一个toString()方法,打印“Movie”后跟1个空格,后跟
标题后跟1个空格,后跟左括号,后跟
这一年紧随其后的是括号。例:                                                                                                                                                             马耳他猎鹰(1941年)

•公共静态方法getTestMovies(),返回10的数组 独特的电影实例。第0个和第1个数组元素必须是2个电影
具有相同的标题,但来自不同的年份(例如The Thomas Crown
1968年的事件和1999年的托马斯皇冠事件,或真正的Grit 1969和 真正的Grit 2010)。第2和第3个元素必须有2个不同的电影 同一年的头衔(例如The Martian 2015和Spies of Bridge 2.4 2015年)。第4和第5个元素必须是2个不同的对象 代表同一部电影。

•hashCode()方法。使用以下内容:

public int hashCode()
{
return title.hashCode() + year;
 }

以下是我到目前为止的内容,我有构造函数和启动器,但我确定该怎么做。

public class Movie implements Comparable<Movie>{
private String title;
private int year;

public Movie(String title, int year){
    this.title = title;
    this.year = year;
}

@Override
public int compareTo(Movie that) {
    int value = 0;
    if(this.title == that.title)
    {
        if(this.year < that.year){
            value = 0;
        }
        else{
            value = -1;
        }
    }
    return value;
}

public static void getTestMovie(){

}

public boolean equals(Object x)
{

} }

任何帮助都表示赞赏!

2 个答案:

答案 0 :(得分:1)

当你想要自然顺序以外的排序时,你应该比较比较而不是比较。请点击以下链接获取更多信息: What is the difference between compare() and compareTo()?

关于字符串比较,请使用str1.equals(str2)。原因如下,链接: What is the difference between == vs equals() in Java?

对于其他问题,请发布一些经过验证的代码。

答案 1 :(得分:0)

您不能在字符串上使用this.title == that.title。您应该使用this.title.equals(that.title)

除了,对于此代码,您不应该。您应该使用this.title.compareTo(that.title)

如果返回非零,则返回该值,因为它表示标题不同时的排序。

如果它返回零,则标题相同,您需要在年份进行二次检查。使用Integer.compare(this.year, that.year)