• ベストアンサー

Java クラスを使ったソート

Javaで隣接交換法を用いて配列dataを昇順に並び替え、出力するプログラムを作成する。 ただし、ループ処理には、int型の変数は使わず、以下のCounterクラスを使用する。 という課題が出て、とり組んでみたのですが所々よく分からないので、お力添えしていただければと思います。 課題には下記のような条件が書いてありました。 配列data={54,76,32,89,45,11,8,54,29,67}; [クラス] Counter [インスタンス変数] int型の値を保持するcount [コンストラクタ] 引数で渡された値を初期値としてインスタンス変数に設定する。 引数を省略された場合、ゼロを設定する。 [メソッド] increment 値に1加算する decrement 値に1減算する compareTo 以下の処理を行う Counterの保持している値が引数に指定された値と 等しい場合、値0を返す。 Counterの保持している値が引数に指定された値より 小さい場合、0より小さい値を返す。 Counterの保持している値が引数に指定された値より 大きい場合、0より大きい値を返す。 get Counterの保持している値を添え字として、 引数で渡された配列の要素を取得します。 set Counterの保持している値を添え字として、 第1引数で渡された配列に第2引数で渡された値を設定します。 以下組んだものです。 ---- class Counter { int count = 0; Counter(int count) { this.count = count; } Counter() { this.count = 0; } public int get(int[] data) { return this.count; } public void set(int[] data, int count) { this.count = count; } public void increment() { this.count = count + 1; } public void decrement() { this.count = count - 1; } public int compareTo() { return count; } } public class Lesson09 { public static void main(String args[]) { Counter counter = new Counter(0); int[] data = {54, 76, 32, 89, 45, 11, 8, 54, 67}; counter.get(data); counter.set(data, 0); } } ---- とりあえず、compareToとsetとgetの部分をどう記述していいのかがよく分かりません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

え? なんで「どれとどれを比較していいのかがよく分からなくて」なんてことが発生しうるんですか? ちゃんと比較するものは文章中に書いてありますよ. まさか, 「これこれとそれそれを比較して」のように「比較する」と書いてないから分からないなんてことはないでしょうね.

felicit
質問者

お礼

とてつもなく大きな勘違いをしていました。 何となく解決できたので、頑張ってみます!

felicit
質問者

補足

「Counterの保持している値」というのは「count」のことですよね…? 「引数に指定された値」というのはclass Lesson09 の 配列dataの事でしょうか?

その他の回答 (3)

  • tom11
  • ベストアンサー率53% (134/251)
回答No.4

隣接交換法、バブルソートのことの様ですね。 javaでは、クイックソートの簡単なメソッドがあります。 これを、参考にして見てください。 int[] data = {54, 76, 32, 89, 45, 11, 8, 54, 67}; Arrays.sort(data); for(int i=0;i<data.length;++i){ System.out.println(data[i]); } System.out.println("******************"); List<Integer> list = new ArrayList<Integer>(); for(int i=0;i<data.length;++i){ list.add(data[i]); } Collections.reverse(list); for(int i=0;i<list.size();++i){ System.out.println(list.get(i)); } 実行結果 8 11 32 45 54 54 67 76 89 ****************** 89 76 67 54 54 45 32 11 8 バブルソートについては、 以下のURLを参考にする良いですよ。 http://www.syboos.jp/java/doc/asc-desc-bubble-sort-sample.html

felicit
質問者

お礼

課題の内容がクラスを用いて…なんです>< でもこんな方法もあるんですね! 参考になりましたっ!

回答No.2

public int compareTo() { ・・って引数がないのはどうしてでしょう? 仕様を見る限りでは、class Counter のクラス変数 int count = 0; は、配列の添え字として使用されるようですね。 counter.get(data); は、「配列 data の、count番目を返して下さい」 counter.set(data, 0); は、「配列 data の、count番目を 0 に設定して下さい」 という処理になります。 このclass Counter 型の変数を2個使えば、ソートは出来そうですね。 このclass Counter 型の変数を1個じゃ無理かも。

felicit
質問者

補足

>public int compareTo() { >・・って引数がないのはどうしてでしょう? class Counter{ の中にある public int compareTo() { return count; } とは別に、作成するのでしょうか?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「どう記述する」も何も, [メソッド] のところにある処理を何も考えずにそのまま Java で書けばいい. たとえば compareTo のところにある 「Counterの保持している値が引数に指定された値と等しい場合、値0を返す。」 は Java でどのように書くか, わかりませんか?

felicit
質問者

補足

ifで比較するんですよね? どれとどれを比較していいのかがよく分からなくて…。 値0を返すは return 0; でいいのでしょうか?

関連するQ&A

専門家に質問してみよう