c と java で同じように書くと
c
1 # define CNT_MAX 10
2 typedef struct {
3 char * name ;
4 int number ;
5 char * favoriteSub [ CNT_MAX ] ;
6 } Member ;
7
8 Member members [ 10 ] ;
9
10 members [ 0 ] . name = "田中" ;
11 members [ 0 ] . number = 1 ;
12 members [ 0 ] . favoriteSub [ 0 ] = "国語" ;
13 members [ 0 ] . favoriteSub [ 1 ] = "社会" ;
14 members [ 0 ] . favoriteSub [ 2 ] = "" ;
15 //(ry
16 members [ 1 ] . name = "鈴木" ;
17 members [ 1 ] . number = 2 ;
18 members [ 1 ] . favoriteSub [ 0 ] = "国語" ;
19 //(ry
java
1 static final int CNT_MAX = 10 ;
2 class Member {
3 String name ; //名前
4 int number ; //出席番号
5 String favoriteSub [ ] = new String [ CNT_MAX ] ; //得意科目
6 }
7
8 Member members [ ] = new Member [ 10 ] ;
9
10 members [ 0 ] = new Member ( ) ;
11 members [ 0 ] . name = "田中" ;
12 members [ 0 ] . number = 1 ;
13 members [ 0 ] . favoriteSub [ 0 ] = "国語" ;
14 members [ 0 ] . favoriteSub [ 1 ] = "社会" ;
15 members [ 0 ] . favoriteSub [ 2 ] = "" ;
16 //(ry
17 members [ 1 ] = new Member ( ) ;
18 members [ 1 ] . name = "鈴木" ;
19 members [ 1 ] . number = 2 ;
20 members [ 1 ] . favoriteSub [ 0 ] = "国語" ;
21 //(ry
コードが java になっても考え方が c のままのようです。
少なくとも Member の FavoriteSub が FavoriteSub[]; のままでは無く。必要な大きさを持つ配列を設定しておく必要があります。
また、入るデータがオブジェクト毎に異なるのであれば、空白を入れての配列では無く List を用いるのが良いと思います。
以下はコンストラクタで全データを指定し不可変とした Member クラスで json 風に表示したものです。
java
1 import java . util . * ;
2
3 public class Main {
4 public static void main ( String [ ] args ) throws Exception {
5 Member a [ ] = new Member [ 2 ] ;
6 a [ 0 ] = new Member ( "田中" , 1 , "国語" , "社会" ) ;
7 a [ 1 ] = new Member ( "鈴木" , 2 , "国語" , "数学" , "体育" ) ;
8
9 for ( int i = 0 ; i < a . length ; i ++ ) System . out . println ( "Member[" + i + "]=" + a [ i ] ) ;
10 }
11 }
12
13 class Member {
14 private String name ; //名前
15 private int number ; //出席番号
16 private String favoriteSub [ ] ; //得意科目
17
18 Member ( String name , int number , String . . . favoriteSub ) {
19 this . name = name ;
20 this . number = number ;
21 this . favoriteSub = favoriteSub ;
22 }
23
24 @Override
25 public String toString ( ) {
26 StringJoiner sj = new StringJoiner ( "," , "[" , "]" ) ;
27 for ( String s : favoriteSub ) sj . add ( s ) ;
28 return "{Name=" + name + ",Number=" + number + ",FavoriteSub=" + sj + "}" ;
29 }
30 }
以下は 得意教科だけ変更出来るようにして、後から田中に外国語を追加、鈴木の国語を削除しています。
java
1 import java . util . * ;
2
3 public class Main {
4 public static void main ( String [ ] args ) throws Exception {
5 Member a [ ] = new Member [ 2 ] ;
6 a [ 0 ] = new Member ( "田中" , 1 , "国語" , "社会" ) ;
7 a [ 1 ] = new Member ( "鈴木" , 2 , "国語" , "数学" , "体育" ) ;
8
9 for ( int i = 0 ; i < a . length ; i ++ ) System . out . println ( "Member[" + i + "]=" + a [ i ] ) ;
10 System . out . println ( ) ;
11
12 a [ 0 ] . addFavoriteSub ( "外国語" ) ;
13 a [ 1 ] . removeFavoriteSub ( "国語" ) ;
14
15 for ( int i = 0 ; i < a . length ; i ++ ) System . out . println ( "Member[" + i + "]=" + a [ i ] ) ;
16 }
17 }
18
19 class Member {
20 final String name ; //名前
21 final int number ; //出席番号
22 private final List < String > favoriteSubList ; //得意科目
23
24 Member ( String name , int number , String . . . favoriteSub ) {
25 this . name = name ;
26 this . number = number ;
27 this . favoriteSubList = new ArrayList ( Arrays . asList ( favoriteSub ) ) ;
28 }
29
30 void addFavoriteSub ( String favoriteSub ) {
31 favoriteSubList . add ( favoriteSub ) ;
32 }
33 void removeFavoriteSub ( String favoriteSub ) {
34 favoriteSubList . remove ( favoriteSub ) ;
35 }
36
37 @Override
38 public String toString ( ) {
39 StringJoiner sj = new StringJoiner ( "," , "[" , "]" ) ;
40 for ( String s : favoriteSubList ) sj . add ( s ) ;
41 return "{Name=" + name + ",Number=" + number + ",FavoriteSub=" + sj + "}" ;
42 }
43 }
実行結果(paiza.io)
Member[0]={Name=田中,Number=1,FavoriteSub=[国語,社会]}
Member[1]={Name=鈴木,Number=2,FavoriteSub=[国語,数学,体育]}
Member[0]={Name=田中,Number=1,FavoriteSub=[国語,社会,外国語]}
Member[1]={Name=鈴木,Number=2,FavoriteSub=[数学,体育]}