• ベストアンサー

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

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

  • Java
  • 回答数2
  • ありがとう数12

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

  • ベストアンサー
  • 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
質問者

お礼

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

関連するQ&A

  • Cの構造体のデータのbyte配列をjavaのclassに入れるには

    サーバーからCの構造体のデータをbyte配列で受け取ったものをjavaのclassに入れるにはどうすればよいでしょうか? クライアントプログラムがCなら受け取ったデータをそのまま構造体にコピーすれば終わりなのですが(サーバーもクライアントもx86なのでendianを気にする必要が無い)、java で簡単に書く方法が分からないので、今はbyte配列から1バイトづつ読みだして、classのメンバーに代入しています。もっとスマートな書き方はないでしょうか?

  • qsortを用いた構造体配列のソート

    お世話になります。 http://simd.jugem.jp/?eid=116 を参考にqsortを用いた構造体配列のソートをC言語で記述しようとしています。 上記のページは、構造体のメンバが配列でない場合です 今回は、メンバが配列のときの構造体配列のソートを実現したいと思っています。 つまり、 typedef struct{ int a; int b[1024]; int c[1024]; }TEST; という構造体配列があって、 TEST base[256]; と宣言し、メンバの配列の添え字を基準としてソートしたいときには、どのようにqsortを用いれば良いのでしょうか、ということです。 どうしたらよいかわからず途方にくれています。 つまり、下のようなソートが行われるには、どのようなプログラムを書けばいいかということです。 構造体でソートするものとします。 構造体でソートできれば、qsortを使っていなくても構いません。 プログラムの得意な方がおりましたら、ご教授下さい。 <ソート前> //************************************************ test[ 0].b[0] = 3; test[ 1].b[0] = 102; ... test[255].b[0] = 1; ------------ test[ 0].b[1] = 99; test[ 1].b[1] = 200; ... test[255].b[1] = 2; ------------ ... ------------ test[ 0].b[1023] = 99; test[ 1].b[1023] = 9; ... test[255].b[1023] = 200; //************************************************** <ソート後>:test[x]ではなく、b[y]を基準としてそれぞれのくくりをソートしたい //************************************************ test[ 0].b[0] = 1; test[ 1].b[0] = 3; ... test[255].b[0] = 102; ------------ test[ 0].b[1] = 2; test[ 1].b[1] = 99; ... test[255].b[1] = 200; ------------ ... ------------ test[ 0].b[1023] = 9; test[ 1].b[1023] = 99; ... test[255].b[1023] = 200; **************************************************

  • 構造体配列の並べ替え

    いつもお世話になっております。 VB6で構造体の配列をソートしたいと考えています。 具体的やりかたは調べたいと思うのですが、ヒントとしてひとつ教えてほしいことがありまして質問させていただきました。 たとえば 名前(string) 身長(integer) 体重(single) 何人分かを仮にprofileという名の構造体に入れて、普通の配列と同じ様に体重だけをソートしたとします。 すると体重だけがソートされてしまうのでしょうか? それとも構造体ごとソートされてくれるのでしょうか? 前者だとかなり悩むことになりそうなので、そこだけ教えていただきたく質問させていただきました。 よろしくお願いします。

  • Javaの擬似構造体を利用したPushとPopについて

    現在、C++のコードをJavaに変換しているのですが、 Javaで構造体を扱うために、クラスを使って擬似構造体を構築し、 この内容をPushとPopで操作したいと考えています。 しかし、C++におけるポインタがJavaには提示されていないため、処理に困っています。 どのようにコーディングすれば、Javaで処理できるでしょうか? よろしくお願いします。 以下、C++のソースです。 //構造体配列の先頭にデータを追加する関数 void push(CPS_struct *cps , int *n) { int i; for (i = *n ; i >= 1 ; i--) { *(cps + i) = *(cps + i - 1); } (*n)++; }

  • 構造体のソートの記述について

     C言語で自己参照構造体(beforeとnextで繋げてます)で名簿をつくり、年齢で昇順ソートをしようと考えています。  そこで、ソート関数の「qsort」というものを使ってソートしたいのですが、どのように使ったらいいのでしょうか?  参考例などがありましたら、教えていただけますか?  よろしくお願いします。

  • プログラミングFortranで、構造体を使えますか?

    Digital Fortran v5.0でC言語の様に構造体 あるいは配列をメモリーに入れて構造体を変化させずに 計算する方法は有りませんか?

  • JavaからC構造体にパケット通信する方法

    ネットワークプログラミングの初心者です。 現行のシステムがC言語で実装されているUDP送受信アプリに対して、 この度、Javaクライアントでも連携をおこなうことになりました。 しかし、現行のシステムはクライアントとサーバ間でC構造体をUDPにて送受信しています。 JavaでC構造体と同様のデータを作成しUDP送信、またサーバからUDP受信したデータをJavaで使用できる型変換する方法はありますでしょうか。 JNIやJNAを使用しない方法で、ご教授いただけますでしょうか。 以下にC構造体の例を記載いたします。 typedef struct udp_data { long b_type; long a_type; char userid[128]; char passward[128]; } UDP_DATA;

    • ベストアンサー
    • Java
  • 構造体配列の安定なソート

    出席番号と得点の配列を持つ構造体配列で、 出席番号順に並んだ状態でqsortを使って得点をソートする場合、 同じ得点の人でも、出席番号順はばらばらになってしまいますよね。 調べてみて、バブルソートなど安定なソートを使えばいいということが分かったのですが、 qsortは標準ライブラリにあって、 比較関数も見よう見まねで作ってなんとかなったのですが、 他の方法となると具体的にどうすればいいのか、 よくわからない状況です。 http://homepage1.nifty.com/daccho/program/algo/sort3.htm こちらのサイトのソースファイルを見て、 普通のint配列のバブルソートは出来たのですが、 構造体配列を、構造体の中の一つの要素をキーにバブルソートできるようにするには、 ここからどのように変更すればいいのでしょうか? 並び替える内容はint型だけなので、文字列をソートできるようにする必要はなく、 ソート対象も少ないので(上限100程度)、速度的な問題は考慮しなくて大丈夫だと思います。 Cは勉強中で、基本文法がわかるぐらいという状況で、 もしかしたら変なことを言っているのかもしれませんが、 よろしくお願いします。

  • JavaのRandomAccessFileについて教えてください。

    お世話になります。  Java(アプレットとして使用しています。)を最近から勉強し 始めました。  現在、作成しようとしているプログラムは、C言語で言うところの 構造体の項目をバイナリファイル内の任意の位置に読み書きしたいと 思っております。  現在、Javaでは、構造体の概念が見当たらなかったので、 Classで各フィールドを定義して、各フィールドの値を ByteBufferでByte配列に配置して、RandomAccessFileでこの配列の内容を書き込んだり、この逆の方法で 読み出したりしています。  この方法だと、各フィールドをわざわざ一つ一つByte配列に 配置しなければならず、面倒です。  他の言語の構造体やレコードの概念の様にフィールドの塊を 一気にランダムファイルに簡単に読み書きする方法は有りませんでしょうか?  ご存知の方がいらっしゃいましたら、ご教示の程、是非よろしくお願いします。

    • ベストアンサー
    • Java
  • 構造体で・・・・

    構造体は配列を使用せずメモリ領域を獲得する関数を使用すること、 *構造体内部のメンバ名には配列を用いて良い。  という、条件があるのですが場合はどのようにすればよろしいでしょうか? どなたか教えてください。 構造体は以下のようになってます。 /*構造体の定義*/ struct seiseki{   char name[20];   int eig;   int suu;   int kok;   char rank[3]; };