重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

① 3
② 1
③ 8

テキストに数字を入力した結果のソートは出来るのですが、それぞれの番号をソート順に表示するにはどうすれば良いのですか?

ソート 1・3・8
 番号 ②・①・③

よろしくお願いします。

A 回答 (3件)

実装としては非常に単純です。





import java.util.Arrays;
import java.util.Comparator;

public class Sort {

static class ArrayElement{
int viIndex;
String vsData;
ArrayElement(int viI, String vsD){
viIndex = viI;
vsData = vsD;
}
}

public static void main(String [] args) {

String[] array0 = {"x", "a", "b", "3", "1"};
ArrayElement[] array1 = new ArrayElement[array0.length];
ArrayElement ae = new ArrayElement(0, "");

for( int i = 0; i<array0.length; i++){
array1[i] = new ArrayElement(i+1, array0[i]);
System.out.println(
array1[i].viIndex+"; "+
array1[i].vsData+"; "+
"");
}

System.out.println();

// sortをカスタマイズする。
Arrays.sort(array1, new Comparator<ArrayElement>() {
@Override
public int compare(ArrayElement ae0, ArrayElement ae1) {
return ae0.vsData.compareTo(ae1.vsData);
}
});

for( int i = 0; i<array0.length; i++){
System.out.println(
array1[i].viIndex+"; "+
array1[i].vsData+"; "+
"");
}

}

}
    • good
    • 1
この回答へのお礼

ありがとうございます。

GUIにしてテキストに表示しようと思ったのですが、このプログラムからは難しいですか?
これまではそんなに苦も無く出来たのですが、いくらやっても表示が出来ません・・・
よろしくお願いします

お礼日時:2018/11/10 08:38

(元の並び順、値)という形でデータを保持するクラスを作り、


(1,3),(2,1),(3,8)
という配列を作って
値でクラスのインスタンスをソートする。
ソートの比較にはComparatorインターフェースを使う。

初心者に難しいのはComparatorインターフェースの実装に
無名の内部クラス使うところですかね。
最初はComparatorインターフェースを普通のクラスとして実装して
普通にインスタンス化しても良いです。
    • good
    • 1
この回答へのお礼

キーボードからテキストに入力した数字を。番号もソートも個別にGUIに表示しようとしているのですが、なかなか頭が回りません・・・
簡単そうで難しいですね。

お礼日時:2018/11/10 09:24

Arrays.sort + Comparatorを使う




String[] array = {"x", "a", "b", "3", "1"};
Arrays.sort(array, new Comparator<String>() {
@Override
public int compare(String obj0, String obj1) {
return obj0.compareTo(obj1);
}
});
for (String string : array) {
System.out.println(string);

ソートはプログラムを製作してうえで避けては通れない分野なので完全に理解してください。
上記の方法ですとソートの動きを理解できず、配列、変数、判定のやり方など曖昧のまま進んでしまい多と後大変苦労するとおもいます。 プログラムの基本があまり理解できない人にはおすすめできません。

基本的なやり方を理解した方が、後々色々の箇所で役に立ちます。ここはじっくりと腰を落ち着いてチャートなど紙の上での分析を書いて理解して解析してください。

あまり根を詰めづに休憩を取りながら頑張ってみてください。

int a[] = {66,12,10,43,45,52,73,65,2,39,97,76,83,11,57,63};
// aの内容を表示
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();



// 先頭から順に隣接する逆順要素を交換する
for (int i = 1; i < a.length; i++) {
if (a[i-1] > a[i]) {
// a[i]とa[i-1]を交換
int w = a[i];
a[i] = a[i-1];
a[i-1] = w;
}
}
// aの内容を表示
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
    • good
    • 1
この回答へのお礼

なんとなく分かってきたけど、やっぱ難しいですね・・・
要するに、ソートさせるときも順番に比較していくわけだから、ソートの順番が決まったところで、そのソートされた数字には、カウントされた数が番号として付く・・・ってことですね?
ソートの仕組みを理解してるようでしてなさそうだから、もう一度見直します。
これからよく考えてみます。

お礼日時:2018/11/09 15:15

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