アプリ版:「スタンプのみでお礼する」機能のリリースについて

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の部分をどう記述していいのかがよく分かりません。
よろしくお願いします。

A 回答 (4件)

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


まさか, 「これこれとそれそれを比較して」のように「比較する」と書いてないから分からないなんてことはないでしょうね.

この回答への補足

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

補足日時:2010/02/23 13:27
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/02/24 10:45

隣接交換法、バブルソートのことの様ですね。



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-so …
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/02/23 23:06

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個じゃ無理かも。

この回答への補足

>public int compareTo() {
>・・って引数がないのはどうしてでしょう?

class Counter{ の中にある
public int compareTo() {
return count;
}
とは別に、作成するのでしょうか?

補足日時:2010/02/23 13:09
    • good
    • 0

「どう記述する」も何も, [メソッド] のところにある処理を何も考えずにそのまま Java で書けばいい.


たとえば compareTo のところにある
「Counterの保持している値が引数に指定された値と等しい場合、値0を返す。」
は Java でどのように書くか, わかりませんか?

この回答への補足

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

補足日時:2010/02/23 11:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!