2014-02-27 32 views
4

对对象数组进行排序我可能会比这更难......但我的任务是创建一个实现Comparable的放映时间类。有了它,它就构建了几种不同剧院的列表,以及电影所显示的内容和时间等。然后,我必须使用compareTo()方法首先对它显示的电影和电影进行排序标题。我有以下代码...当我尝试输出排序结果时出现混淆。我将它输出到比较字符串的位置 - 或+号。使用compareTo()

public class ShowTimeTest { 


public static void main(String[] args) { 
    ShowTime[] movieTimes= new ShowTime[20]; 
    // TODO Auto-generated method stub 
    //****************************************************** 
    //Instantiates 20 showtime objects 
    //****************************************************** 



ShowTime cinemark1 = new ShowTime("Cinemark", "Lorde", "Friday @ 3:30", "Saturday @ 7:00", "Sunday @ 6:00","R", 1, 2); 
ShowTime cinemark2 = new ShowTime("Amstar Cinemas", "Star Wars", "Thursday @ 12:00AM", "Monday @ 4:00PM", "Sunday @ 3:45PM","R", 1, 2); 
ShowTime cinemark3 = new ShowTime("Fayette Movies", "Pokemon", "Friday @ 3:30", "Saturday @ 7:00", "Sunday @ 6:00","R", 1, 2); 
ShowTime cinemark4 = new ShowTime("Dollar Theatre", "Reincarnated", "Friday @ 3:30", "Saturday @ 7:00", "Sunday @ 6:00","R", 1, 2); 
ShowTime cinemark5 = new ShowTime("Rad Chads Cinemas", "Lorde", "Friday @  3:30",  "Saturday @ 7:00", "Sunday @ 6:00","R", 1, 2); 
movieTimes[0] = cinemark1; 
movieTimes[1] = cinemark2; 
movieTimes[2] = cinemark3; 
movieTimes[3] = cinemark4; 
movieTimes[4] = cinemark5; 

for(int i = 1; i < 5; i ++){ 
    System.out.println(movieTimes[i].compareTo(movieTimes[i-1])); 

} 
} 
} 

续...

public class ShowTime implements Comparable<ShowTime>{ 

public String name, title, rating, showTime1, showTime2, showTime3; 
public double ticket, adultTicket; 
public String[] times = new String[3]; 

public ShowTime(String theatreName, String movieTitle, String showTime1, String showTime2, String showTime3 , String movieRating, double childTicket, double aTicket) 
{ 
    // TODO Auto-generated constructor stub 
name = theatreName; 
title = movieTitle; 
times[0] = showTime1; 
times[1] = showTime2; 
times[2] = showTime3; 
rating = movieRating; 
ticket = childTicket; 
adultTicket = aTicket; 
} 
public String toString(){ 
    String out = "Theatre: "; 
    out += name+ " " + "Movie: " + title + " " + "Rating " + rating + " " + "ShowTimes " + times[0] + " " + times[1] + " " + times[2] 
      + " " + "Adult Cost: " + adultTicket + " " + "Child Ticket: " +ticket; 
    return out; 
} 
public int compareTo(ShowTime other) { 
    // TODO Auto-generated method stub 
    //sorts the showtimes by theater(NAME) and movie(TITLE) 
    int result; 

    if(name.equals(((ShowTime)other).name)){ 
     result = title.compareTo(((ShowTime)other).title); 
    } 

    else{ 
     result = name.compareTo(((ShowTime)other).name); 
    } 
    return result; 
} 
} 
+4

就快完成了 - 现在只是排序! – mbroshi

+0

谢谢!很高兴听到我确实在做正确的事情。我在分拣事物时感到很失落,就像我花了我所有的大脑力量做上述 – cdc09

+0

,如果你调用Arrays.sort(movieTimes),你将得到一个'NullPointerException';''因为你只是初始化了5个元素,但你已经分配了20个。 – jfly

回答

5

使您的类实现Comparable界面,让你可以排序的ShowTime秒的阵列的点。你已经完成了所有的艰苦工作。现在只需申请Arrays.sort,坐下来欣赏电影。

既然这是一个教育节目,让我百分之百地清楚:你已经有自己的Object[]其元素实施Comparable,即movieTimes。所以,你需要做的就是添加一行:

Arrays.sort(movieTimes); 

注意,直到您填写您的影院20部电影(或声明为只保存5电影miniplex),这将失败。

+0

之前我们都能正常工作,我们也会得到爆米花吗? –

+0

我正在写一个答案,但我不认为还有什么需要说的。只要打电话排序。 – Radiodef

+0

谢谢!这是一个真正的帮助,我努力应用它,因为与对象数组有很多关系。我倾向于使这些小事情比他们更难,它只是失去了我,因为我必须根据电影(名称)和电影排序,我只是试过:sort(movieTimes,0,5);在我得到语法错误说排序是未定义的 – cdc09

0

可以使用Collections类:

List<ShowTime> list = Arrays.asList(array); 
Collections.sort(list); 
movieTimes = list.toArray(); 
+0

他可以使用更好的'Arrays.sort(array)' – nachokk

+0

是的,当时没有看到答案。 – PlasmaPower