2012-03-30 69 views
2

如何排序对象数组?这是我对数组进行排序的代码,我收到“not a statement”错误:Movie temp = movies [b];我该如何声明临时变量,就好像它保存电影的确切值/参考[b];它可以是同一个数组中的三种不同的对象类型中的任何一种?我是编程新手,所以我很抱歉,如果我似乎无知;如果我错误地回答了问题,请随时纠正或提出问题。对Java中的对象数组进行气泡排序

public static String bubbleSort(Movie[] movies) { 
    for (int a=1; a<movies.length; a++) { 
     for(int b=0; b<movies.length - a; b++) { 
      if (((movies[b].getTitle()).compareTo((movies[b+1].getTitle()))) > 0) 
       //swap movies[b] with movies[b+1] 
       Movie temp = movies[b]; 
      movies[b] = movies[b+1]; 
      movies[b+1] = temp; 
     } 
    } 
} 
+0

你会想在if语句后面的3个语句中加括号。如果没有括号,只有条件后面的第一条语句 - “Movie temp = movies [b];' - 将有条件地执行。其他两个语句将始终执行。 – dj18 2012-03-30 20:19:05

回答

3

当数组被定义为Movie[]它可以仅包含Movie类型的对象。所以你只能有Movie在那里。但是,要做到这一点,您应该将类​​型定义为Object,将数组定义为Object[]

但是,在您的代码中,假设您确实有Movie对象,因为您使用的是Movie.getTitle()。您将无法访问Object的参考文献。我建议让你的对象实现Comparable,并使用类型Comparable作为数组的类型和临时变量。

1

使用Collections api,不要重新发明轮子做你自己的分类实现。

+1

自己实现算法是学习语言和算法的好方法。继续艾登并重塑你想要的所有轮子! – 2012-03-30 20:21:18

+0

这也可以作为一项排序算法的作业。 – jzworkman 2012-03-30 20:26:09

+0

虽然这是真的,但它可能不会给你真实世界的语言练习..更好地学习API,你会像Collections API那样日复一日地使用API​​。但是,如果你只是想学习这门语言,那肯定会的。即使这样,有可能比泡泡排序更好的东西... – 2012-03-30 20:27:03

2

Movie temp = movies[b];是一个声明,而不是一个声明。你想这样的:

 if (((movies[b].getTitle()).compareTo((movies[b+1].getTitle()))) > 0) 
     { 
      //swap movies[b] with movies[b+1] 
      Movie temp = movies[b]; 
      movies[b] = movies[b+1]; 
      movies[b+1] = temp; 
     } 

注意我所做的就是加括号周围所有的交换代码,使它成为一个块,可以包含一项声明。我认为这是你的意图,但是省略了大括号。

+0

非常感谢您的快速响应。很有帮助。 – 2012-03-30 20:30:40

+0

正是我所需要的! – 2017-02-28 21:10:31

1

您错过了{测试之后,并且错误地承诺要返回一个字符串。试试这个,

public static void bubbleSort(Movie[] movies) { 
    for (int a = 1; a < movies.length; a++) { 
     for (int b = 0; b < movies.length - a; b++) { 
      if (((movies[b].getTitle()) 
        .compareTo((movies[b + 1].getTitle()))) > 0) { 
       // swap movies[b] with movies[b+1] 
       Movie temp = movies[b]; 
       movies[b] = movies[b + 1]; 
       movies[b + 1] = temp; 
      } 
     } 
    } 
} 
+0

是的!这正是它,我真的想通了,并回来删除帖子。谢谢你的快速反应!我非常感谢! – 2012-03-30 20:26:27

+0

下次在这种情况下,通过将方法简化为单个语句/表达式或控制结构来解决该问题,然后每次重新添加剩余的代码,直到发生编译错误。你很快就会在这个舞台上走向更大的辉煌! – 2012-03-30 20:29:21