• ベストアンサー

Javaには、構造体はないんですか?

 C言語の構造体みたいなのはないんですか? 野球のデータを扱っているのですが、構造体がないのでできません。 打率の順位をソートしたいのですが、Cでは構造体でソートすれば選手名まで全部ソートできたのですが。。。 Javaでは、いちいち選手名、打率などの配列を作っているのですが、打率をソートしてから選手名と一緒に表示しようとしても打率の配列だけ、ソートしてあり選手名の配列と打率の配列があいません。 要するに、打率の配列はソートし、選手の配列はデータを入力したときのままなので、順番が違っているのです。 うまい方法を教えてください。初歩的な質問でごめんなさい。

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

メンバーが public なクラスが構造体と(ほぼ)同じです。 大体こんな感じ。 // sort Object using Arrays.sort() import java.util.Arrays; class Batter implements Comparable {  public double rate;  public String name;  Batter(double r, String n) {   rate = r;   name = n;  }  public int compareTo(Object o) {   return (int)((rate - ((Batter)o).rate)*1000.);  } } class w03 {  public static void main(String[] args) {   Object[] batter = {    new Batter(0.3, "ichiro"),    new Batter(0.1, "shinjo"),    new Batter(0.0, "irabu")   };   // sort   Arrays.sort(batter);   // print-out to console   for (int i=0; i < batter.length; i++) {    Batter b = (Batter)batter[i];    System.out.println(b.name + " " + Double.toString(b.rate));   }  } } このように java.util.Arrays の sort() メソッドを使うと、C でやってた イメージに近くなります。 C の qsort() と違って、どんなデータでもソートできるわけではなく、対象と なるクラスは Comparable インターフェースを実装しなくてはいけません。

kamkamkam3
質問者

お礼

ご丁寧の回答ありがとうございました。 すごくわかりやすくて、とても助かりました。必要なことは全部書いていただけたんですね。 とてもハッキリとわかりました。私初心者なものですから、ComparableをimplementsするとかArrayクラスの存在とか知らなくて、自分でメソッドを作らなければいけないのかな?と思っていました。1通りの順序を書いてもらったので、大助かりです。 ありがとうございます。

その他の回答 (1)

  • yurarinco
  • ベストアンサー率34% (20/58)
回答No.1

構造体の変わりにクラスを作ればいいと思います。 たとえば、 struct Data { char name[20]; double daritsu; }; の代わりに class Data { public String name; public double daritsu; } で、 data = new Data[10];//10人分のデータ とか。

kamkamkam3
質問者

お礼

自分で作ったクラスの配列なんてできるんですね~。 知りませんでした。ありがとうございます。 これで、なんとなくできるような・・・がんばってみます。