• 締切済み

並び換えるクラスについて

小さい順に並べかえをテストするクラスが下のように指定されている場合、 小さい順に並べかえ処理をするクラスはどのようにすればいいのでしょう? class SortTest{ public static void main(String[] args){ int[] arri = {3, 2, 8, 7, 4, 6, 1, 0, 5, 9}; System.out.println(); System.out.print("\tソート前:"); arrayPrintln(arri); tool.Sort.ascendBubble(arri); // クラスメソッドに処理を委譲 System.out.print("\tソート後:"); arrayPrintln(arri); System.out.println(); double[] arrd = {3.3, 2.2, 8.8, 7.7, 4.4, 6.6, 1.1, 0.0, 5.5, 9.9}; System.out.println(); System.out.print("\tソート前:"); arrayPrintln(arrd); tool.Sort.ascendBubble(arrd); // クラスメソッドに処理を委譲 System.out.print("\tソート後:"); arrayPrintln(arrd); System.out.println(); } //配列の値を出力するメソッド******************* public static void arrayPrintln(int[] arr){ for(int i=0; i<arr.length; i++){ System.out.print(arr[i] + " "); } System.out.println(""); } public static void arrayPrintln(double[] arr){ for(int i=0; i<arr.length; i++){ System.out.print(arr[i] + " "); } System.out.println(""); } } 初心者な私がggったりして作成したやつが↓です。 class Sort{ public ascendBubble(int[] arri); public ascendBubble(double[] arri); //public void getArri(){ //public void getArri(String[] arri){ public void getArri(int[] arri){ for(int i=0;i<arri.length-1;i++){ for(int j=arri.length-1;j>i;j--){ if(arri[j]<arri[j-1]){ int t=arri[j]; arri[j]=arri[j-1]; arri[j-1]=t; } } } } public void getArri(double[] arri){ for(int i=0;i<arri.length-1;i++){ for(int j=arri.length-1;j>i;j--){ if(arri[j]<arri[j-1]){ int t=arri[j]; arri[j]=arri[j-1]; arri[j-1]=t; } } } } } わかりずらいかと思いますが、 アドバイスの方よろしくお願いします。

みんなの回答

  • ninoue
  • ベストアンサー率52% (1288/2437)
回答No.2

自分で作ったソートルーチンではなく、システム標準のソートルーチンを使われるのですか? 自分のルーチンを呼びたい場合には tool.Sort.ascendBubble ではなく、単純に Sort.ascendBubble として呼べば良いのではないでしょうか。 getArri(int[] arri) ルーチン等は使われていません。 ascendBubble(int[] arri) 等の誤りではないでしょうか。 getArri(double[] arri) の中の次は誤りです。 型変換が起らないようにして下さい。 int t=arri[j] double t=arri(j); arri[j]=arri[j-1]; arri[j-1]=t;

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

ggったのなら、このコードと一緒に、どうしてこれが並び換えになるか、解説がなかったですか? 大きい順(降順)は、大きい値が前の方、小さい値が後の方にくる並び方です。 並び換えのプログラムでは、順番通りでない箇所(大きい値が後の方、小さい値が前の方)を正しい順番になるように入れかえます。 小さい順(昇順)は、小さい値が前の方、大きい値が後の方にくる並び方です。 並び換えのプログラムでは、順番通りでない箇所(小さい値が後の方、大きい値が前の方)を正しい順番になるように入れかえます。 上の2つを読み比べれば、どこを変えれば昇順と降順を変更できるか、わかると思います。 あと > public void getArri(double[] arri){ の方 > int t=arri[j]; > arri[j]=arri[j-1]; > arri[j-1]=t; ここに間違いがあります。この1連のコードがなにをやっているか、よく考えてみましょう。

関連するQ&A