2012-03-30 7 views
2

オブジェクトの配列をソートするにはどうすればよいですか?これは配列をソートするための私のコードですが、私は "not a statement"エラーを受け取ります:Movie temp = movies [b]; temp変数を、映画の正確な値/参照を保持するかのように宣言しますか?同じ配列内にある3つの異なるオブジェクト型のいずれかになる可能性がありますか?私はプログラミングに慣れていないので、もし私が無知であると思われるなら、私は謝罪する。私が間違って質問を述べた場合、私を修正したり、質問をしてください。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];'という節の後の最初の文だけが条件付きで実行されます。他の2つのステートメントは常に実行されます。 – dj18

答えて

3

配列は、それが唯一のタイプMovieのオブジェクトが含まできMovie[]として定義されます。だからそこにはMovieしか入れることができません。ただし、これを一般化するには、タイプをObject、配列をObject[]と定義する必要があります。

ただし、Movie.getTitle()を使用しているため、コード内に実際にMovieオブジェクトがあると仮定しています。 Objectの参照からアクセスすることはできません。あなたのオブジェクトにComparableを実装させ、配列のタイプと一時変数としてタイプComparableを使用することをお勧めします。

1

コレクションのAPIを使用して、独自の並べ替えの実装を行うホイールを再作成しないでください。

+1

自分でアルゴリズムを実装することは、言語とアルゴリズムの両方を学ぶ良い方法です。あなたが欲しいすべての車輪を再現してください。 –

+0

これはまた、ソートアルゴリズムを行う宿題かもしれません。 – jzworkman

+0

真実だが、実際の世界の練習を言語で与えることはできないかもしれません。Collections APIのように、日中使用するAPIを学ぶ方がよいでしょう。しかし、おそらく言語を勉強したいのであれば確かに。それでも、バブルソートよりも優れたものがあるかもしれません... –

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; 
     } 

注すべてのIでしたが宣言を含めることができるブロックにそれを作る、すべてのスワップコードの周りにカッコを追加します。私はこれがあなたが意図したものだと思うが、中括弧は省略した。

+0

ありがとう、あなたは非常に迅速な対応のためにありがとう。非常に役立ちます。 –

+0

まさに私が必要なもの! –

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

はい!それはちょうどそれだった、私は実際にそれを考え出し、ポストを削除するために戻った。迅速な対応のためにトンをありがとう!私はそれを大いに感謝します! –

+0

次回このような状況になったときは、メソッドを1つのステートメント/式または制御構造に減らし、コンパイルエラーが発生するまでコードの残りの部分を一度に再追加して解決します。あなたはすぐにこのステージを過ぎてより大きな栄光へと向かいます! –

関連する問題