2012-03-30 96 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