回答編集履歴

1

追記

2020/04/04 06:24

投稿

jimbe
jimbe

スコア13209

test CHANGED
@@ -65,3 +65,167 @@
65
65
 
66
66
 
67
67
  どんな文字列を送受信すれば board を再現できるかをお考えください.
68
+
69
+
70
+
71
+ #追記
72
+
73
+ 文字列の送受信が出来ていれば, 以下のように2次元配列←→文字列の変換メソッドを用意することでやり易くなるかと思います.
74
+
75
+ ```java
76
+
77
+ package teratail.q246663;
78
+
79
+
80
+
81
+ public class ArrayToStringText {
82
+
83
+ public static void main(String[] args) {
84
+
85
+ int[][] board1 = new int[8][8];
86
+
87
+ board1[3][3] = board1[4][4] = 1;
88
+
89
+ board1[3][4] = board1[4][3] = 2;
90
+
91
+ board1[2][4] = board1[3][5] = board1[4][2] = board1[5][3] = 3;
92
+
93
+
94
+
95
+ print("board1 -----",board1);
96
+
97
+
98
+
99
+ System.out.println("line -----");
100
+
101
+ String line = createString(board1);
102
+
103
+ System.out.println(line);
104
+
105
+
106
+
107
+ int[][] board2 = createArray2D(line);
108
+
109
+ print("board2 -----",board2);
110
+
111
+ }
112
+
113
+ static void print(String label, int[][] array) {
114
+
115
+ System.out.println(label);
116
+
117
+ for(int i=0;i<array.length; i++) {
118
+
119
+ for(int j=0; j<array[i].length; j++)
120
+
121
+ System.out.print(array[i][j]);
122
+
123
+ System.out.println();
124
+
125
+ }
126
+
127
+ }
128
+
129
+
130
+
131
+ /**
132
+
133
+ * 2次元配列を数字列化.<br>
134
+
135
+ * array2D.length と array2D[i].length が同じで無い場合, array2D[i].length の方が小さければ例外が発生するが,
136
+
137
+ * 大きい場合は i >= array2D.length の範囲のデータは無視される.
138
+
139
+ * @param array2D 2次元配列
140
+
141
+ * @return 文字列化した配列データ
142
+
143
+ */
144
+
145
+ static String createString(int[][] array2D) {
146
+
147
+ int w = array2D.length; //一辺の大きさ
148
+
149
+ int size = (int)Math.pow(w,2); //全体の大きさ
150
+
151
+ StringBuilder sb = new StringBuilder(size);
152
+
153
+ for(int i=0; i<size; i++) sb.append((char)('0'+array2D[i/w][i%w]));
154
+
155
+ return sb.toString();
156
+
157
+ }
158
+
159
+ /**
160
+
161
+ * 数字列を2次元配列化.
162
+
163
+ * @param line 数字列
164
+
165
+ * @return 2次元配列
166
+
167
+ * @throws IllegalArgumentException 正方形にならない場合
168
+
169
+ */
170
+
171
+ static int[][] createArray2D(String line) {
172
+
173
+ int w = (int)Math.sqrt(line.length()); //一辺の大きさ
174
+
175
+ if(Math.pow(w,2) != line.length()) throw new IllegalArgumentException(); //正方形のデータで無ければ例外
176
+
177
+ int[][] array2D = new int[w][w];
178
+
179
+ for(int i=0; i<line.length(); i++) array2D[i/w][i%w] = line.charAt(i)-'0';
180
+
181
+ return array2D;
182
+
183
+ }
184
+
185
+ }
186
+
187
+ ```
188
+
189
+ ```plain text
190
+
191
+ board1 -----
192
+
193
+ 00000000
194
+
195
+ 00000000
196
+
197
+ 00003000
198
+
199
+ 00012300
200
+
201
+ 00321000
202
+
203
+ 00030000
204
+
205
+ 00000000
206
+
207
+ 00000000
208
+
209
+ line -----
210
+
211
+ 0000000000000000000030000001230000321000000300000000000000000000
212
+
213
+ board2 -----
214
+
215
+ 00000000
216
+
217
+ 00000000
218
+
219
+ 00003000
220
+
221
+ 00012300
222
+
223
+ 00321000
224
+
225
+ 00030000
226
+
227
+ 00000000
228
+
229
+ 00000000
230
+
231
+ ```