質問編集履歴

3

コード変更

2021/11/01 05:08

投稿

taka0145
taka0145

スコア7

test CHANGED
@@ -1 +1 @@
1
- テーブルに合わせてハイフンを連続して示させたい
1
+ javaでのの作成
test CHANGED
@@ -1,14 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- テキストファイルの情報を読み込みそれを基に、以下のような表を作りたいです
3
+ テキストファイルの情報を読み込みそれを基に、表を作
4
-
5
- また、条件として、
6
-
7
- ①項目名は中央揃え、名前は左揃え、点数は右寄せ
8
-
9
- ②テキストファイルの情報は追加されることも考慮する
10
-
11
- ③最大文字数に合わせて列の幅を調整
12
4
 
13
5
 
14
6
 
@@ -20,19 +12,7 @@
20
12
 
21
13
 
22
14
 
23
- ・CUI
24
15
 
25
- |   名前   | 国語 | 数学 |
26
-
27
- +----------------------------------+
28
-
29
- |田中ゆうき   |  80|     |
30
-
31
- +---------------------------------+
32
-
33
- |佐藤かつひこ |     | 50|
34
-
35
- +----------------------------------+
36
16
 
37
17
 
38
18
 
@@ -47,30 +27,6 @@
47
27
  エラーメッセージ
48
28
 
49
29
 
50
-
51
- 現在以下のように表示されています。
52
-
53
- 横の"-"を行の最大まで繰り返す方法、
54
-
55
- また、該当の科目欄に点数を表示させたいのですが、
56
-
57
- CSVファイル読み取りのまま表示させることしかできず、手詰まりの状態です。
58
-
59
- どなたかご教授頂けないでしょうか。
60
-
61
-
62
-
63
-  
64
-
65
- |名前    |国語|数学|
66
-
67
- -
68
-
69
- |田中ゆうき |国語| 80|
70
-
71
- -
72
-
73
- |佐藤かつひこ|数学| 50|
74
30
 
75
31
  ```
76
32
 
@@ -126,237 +82,13 @@
126
82
 
127
83
 
128
84
 
129
- drawTable(data);
85
+
130
-
131
- writeTable(data);
132
86
 
133
87
  }
134
88
 
135
89
 
136
90
 
137
- //1行目の縦方向の表示
138
-
139
- public static void drawTable( String[][] data ) {
140
-
141
-
142
-
143
- int[] max = maxWidth( data );
144
-
145
- for( int i = 0; i < 1; i++ ) {
146
-
147
- drawLine( data[i], max );
148
-
149
- System.out.print( "|" );
150
-
151
- System.out.println();
152
-
153
- System.out.print("-");
154
-
155
- System.out.println();
156
-
157
- }
158
-
159
- }
160
-
161
91
 
162
-
163
- //1行目の横方向の表示
164
-
165
- private static void drawLine( String[] line, int[] max ) {
166
-
167
-
168
-
169
- //1行目を中央揃え
170
-
171
- for( int j = 0; j < line.length; j++ ) {
172
-
173
- int s = ( max[j] - count( line[j] ) );
174
-
175
- int s1, s2;
176
-
177
- if( (s % 2) == 0 ) {
178
-
179
- s1 = s2 = s/2;
180
-
181
- } else {
182
-
183
- s1 = s/2 + 1; s2 = s/2;
184
-
185
- }
186
-
187
- System.out.print( "|" );
188
-
189
- for( int k = 1; k <= s1; k++ ) {
190
-
191
- System.out.print( " " );
192
-
193
- }
194
-
195
- System.out.print( line[j] );
196
-
197
- for( int k = max[j] - s2; k < max[j]; k++ ) {
198
-
199
- System.out.print( " " );
200
-
201
- }
202
-
203
-
204
-
205
- }
206
-
207
- }
208
-
209
-
210
-
211
- //2行目以降の縦方向の表示
212
-
213
- public static void writeTable( String[][] data ) {
214
-
215
-
216
-
217
- int[] max = maxWidth( data );
218
-
219
- for( int i = 1; i < data.length; i++ ) {
220
-
221
- writeLine( data[i], max );
222
-
223
- System.out.print( "|" );
224
-
225
- System.out.println();
226
-
227
- System.out.print("-");
228
-
229
- System.out.println();
230
-
231
- }
232
-
233
-
234
-
235
- }
236
-
237
-
238
-
239
- //2行目以降の横方向の表示
240
-
241
- private static void writeLine( String[] line, int[] max ) {
242
-
243
-
244
-
245
- //1列目を左寄せ
246
-
247
- for( int j = 0; j < 1; j++ ) {
248
-
249
- System.out.print( "|" + line[j] );
250
-
251
- for( int k=count( line[j] ) + 1; k <= max[j]; k++ ) {
252
-
253
- System.out.print( " " );
254
-
255
- }
256
-
257
- }
258
-
259
- //2列目以降を右寄せ
260
-
261
- for( int j = 1; j < line.length; j++ ) {
262
-
263
- System.out.print( "|" );
264
-
265
- for( int k=count( line[j] ) + 1; k <= max[j]; k++ ) {
266
-
267
- System.out.print( " " );
268
-
269
- }
270
-
271
- System.out.print( line[j] );
272
-
273
- }
274
-
275
- }
276
-
277
-
278
-
279
-
280
-
281
- //列の幅の最大を求める
282
-
283
- private static int[] maxWidth( String[][] data ) {
284
-
285
- int[] max = new int[ data[0].length ];
286
-
287
- for( int j = 0; j < data[0].length; j++ ) {
288
-
289
- max[j] = 0;
290
-
291
- for( int i = 0; i < data.length; i++ ) {
292
-
293
- int n = count( data[i][j] );
294
-
295
- if( n > max[j] ) {
296
-
297
- max[j] = n;
298
-
299
- }
300
-
301
- }
302
-
303
- }
304
-
305
- return max;
306
-
307
- }
308
-
309
-
310
-
311
- //英数字、カタカナ、ひらがな、漢字の文字コードを分類する
312
-
313
- public static int count( String str ) {
314
-
315
-
316
-
317
- int count = 0;
318
-
319
- char[] a = str.toCharArray();
320
-
321
- for( int i=0; i<str.length(); i++ ) {
322
-
323
- if( Character.UnicodeBlock.of( a[i] ).equals
324
-
325
- ( Character.UnicodeBlock.BASIC_LATIN ) ) {
326
-
327
- count++;
328
-
329
- }
330
-
331
- else if( Character.UnicodeBlock.of( a[i] ).equals
332
-
333
- ( Character.UnicodeBlock.KATAKANA ) ) {
334
-
335
- count+=2;
336
-
337
- }
338
-
339
- else if( Character.UnicodeBlock.of( a[i] ).equals
340
-
341
- ( Character.UnicodeBlock.HIRAGANA ) ) {
342
-
343
- count+=2;
344
-
345
- }
346
-
347
- else if( Character.UnicodeBlock.of( a[i] ).equals
348
-
349
- ( Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS) ) {
350
-
351
- count+=2;
352
-
353
- }
354
-
355
- }
356
-
357
- return count;
358
-
359
- }
360
92
 
361
93
 
362
94
 

2

質問タイトルの変更

2021/11/01 05:08

投稿

taka0145
taka0145

スコア7

test CHANGED
@@ -1 +1 @@
1
- CSVァイル読み取り、を作成したい
1
+ テーブルに合わせてハイ連続して示させたい
test CHANGED
File without changes

1

書式の改善

2021/10/10 07:47

投稿

taka0145
taka0145

スコア7

test CHANGED
File without changes
test CHANGED
@@ -1,7 +1,5 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
-
4
-
5
3
  テキストファイルの情報を読み込みそれを基に、以下のような表を作りたいです。
6
4
 
7
5
  また、条件として、
@@ -74,7 +72,7 @@
74
72
 
75
73
  |佐藤かつひこ|数学| 50|
76
74
 
77
- -
75
+ ```
78
76
 
79
77
 
80
78
 
@@ -84,8 +82,6 @@
84
82
 
85
83
  ```java
86
84
 
87
-
88
-
89
85
  class Sample {
90
86
 
91
87