質問編集履歴
3
コード変更
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
javaでの表の作成
|
body
CHANGED
@@ -1,40 +1,18 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
|
-
テキストファイルの情報を読み込みそれを基に、
|
2
|
+
テキストファイルの情報を読み込みそれを基に、表を作成。
|
3
|
-
また、条件として、
|
4
|
-
①項目名は中央揃え、名前は左揃え、点数は右寄せ
|
5
|
-
②テキストファイルの情報は追加されることも考慮する
|
6
|
-
③最大文字数に合わせて列の幅を調整
|
7
3
|
|
8
4
|
・テキストファイル
|
9
5
|
田中ゆうき,国語,80
|
10
6
|
佐藤かつひこ,数学,50
|
11
7
|
|
12
|
-
・CUI
|
13
|
-
| 名前 | 国語 | 数学 |
|
14
|
-
+----------------------------------+
|
15
|
-
|田中ゆうき | 80| |
|
16
|
-
+---------------------------------+
|
17
|
-
|佐藤かつひこ | | 50|
|
18
|
-
+----------------------------------+
|
19
8
|
|
20
9
|
|
10
|
+
|
21
11
|
### 発生している問題・エラーメッセージ
|
22
12
|
|
23
13
|
```
|
24
14
|
エラーメッセージ
|
25
15
|
|
26
|
-
現在以下のように表示されています。
|
27
|
-
横の"-"を行の最大まで繰り返す方法、
|
28
|
-
また、該当の科目欄に点数を表示させたいのですが、
|
29
|
-
CSVファイル読み取りのまま表示させることしかできず、手詰まりの状態です。
|
30
|
-
どなたかご教授頂けないでしょうか。
|
31
|
-
|
32
|
-
|
33
|
-
|名前 |国語|数学|
|
34
|
-
-
|
35
|
-
|田中ゆうき |国語| 80|
|
36
|
-
-
|
37
|
-
|佐藤かつひこ|数学| 50|
|
38
16
|
```
|
39
17
|
|
40
18
|
### 該当のソースコード
|
@@ -62,122 +40,10 @@
|
|
62
40
|
|
63
41
|
String[][] data = lineList.toArray(new String[lineList.size()][]);
|
64
42
|
|
65
|
-
drawTable(data);
|
66
|
-
writeTable(data);
|
67
|
-
}
|
68
|
-
|
69
|
-
//1行目の縦方向の表示
|
70
|
-
public static void drawTable( String[][] data ) {
|
71
|
-
|
72
|
-
int[] max = maxWidth( data );
|
73
|
-
for( int i = 0; i < 1; i++ ) {
|
74
|
-
drawLine( data[i], max );
|
75
|
-
System.out.print( "|" );
|
76
|
-
System.out.println();
|
77
|
-
System.out.print("-");
|
78
|
-
System.out.println();
|
79
|
-
}
|
80
|
-
}
|
81
|
-
|
82
|
-
//1行目の横方向の表示
|
83
|
-
private static void drawLine( String[] line, int[] max ) {
|
84
43
|
|
85
|
-
//1行目を中央揃え
|
86
|
-
for( int j = 0; j < line.length; j++ ) {
|
87
|
-
int s = ( max[j] - count( line[j] ) );
|
88
|
-
int s1, s2;
|
89
|
-
if( (s % 2) == 0 ) {
|
90
|
-
s1 = s2 = s/2;
|
91
|
-
} else {
|
92
|
-
s1 = s/2 + 1; s2 = s/2;
|
93
|
-
}
|
94
|
-
System.out.print( "|" );
|
95
|
-
for( int k = 1; k <= s1; k++ ) {
|
96
|
-
System.out.print( " " );
|
97
|
-
}
|
98
|
-
System.out.print( line[j] );
|
99
|
-
for( int k = max[j] - s2; k < max[j]; k++ ) {
|
100
|
-
System.out.print( " " );
|
101
|
-
}
|
102
|
-
|
103
|
-
}
|
104
|
-
}
|
105
|
-
|
106
|
-
//2行目以降の縦方向の表示
|
107
|
-
public static void writeTable( String[][] data ) {
|
108
|
-
|
109
|
-
int[] max = maxWidth( data );
|
110
|
-
for( int i = 1; i < data.length; i++ ) {
|
111
|
-
writeLine( data[i], max );
|
112
|
-
System.out.print( "|" );
|
113
|
-
System.out.println();
|
114
|
-
System.out.print("-");
|
115
|
-
System.out.println();
|
116
|
-
}
|
117
|
-
|
118
44
|
}
|
119
45
|
|
120
|
-
//2行目以降の横方向の表示
|
121
|
-
private static void writeLine( String[] line, int[] max ) {
|
122
|
-
|
123
|
-
//1列目を左寄せ
|
124
|
-
for( int j = 0; j < 1; j++ ) {
|
125
|
-
System.out.print( "|" + line[j] );
|
126
|
-
for( int k=count( line[j] ) + 1; k <= max[j]; k++ ) {
|
127
|
-
System.out.print( " " );
|
128
|
-
}
|
129
|
-
}
|
130
|
-
//2列目以降を右寄せ
|
131
|
-
for( int j = 1; j < line.length; j++ ) {
|
132
|
-
System.out.print( "|" );
|
133
|
-
for( int k=count( line[j] ) + 1; k <= max[j]; k++ ) {
|
134
|
-
System.out.print( " " );
|
135
|
-
}
|
136
|
-
System.out.print( line[j] );
|
137
|
-
}
|
138
|
-
}
|
139
46
|
|
140
|
-
|
141
|
-
//列の幅の最大を求める
|
142
|
-
private static int[] maxWidth( String[][] data ) {
|
143
|
-
int[] max = new int[ data[0].length ];
|
144
|
-
for( int j = 0; j < data[0].length; j++ ) {
|
145
|
-
max[j] = 0;
|
146
|
-
for( int i = 0; i < data.length; i++ ) {
|
147
|
-
int n = count( data[i][j] );
|
148
|
-
if( n > max[j] ) {
|
149
|
-
max[j] = n;
|
150
|
-
}
|
151
|
-
}
|
152
|
-
}
|
153
|
-
return max;
|
154
|
-
}
|
155
|
-
|
156
|
-
//英数字、カタカナ、ひらがな、漢字の文字コードを分類する
|
157
|
-
public static int count( String str ) {
|
158
|
-
|
159
|
-
int count = 0;
|
160
|
-
char[] a = str.toCharArray();
|
161
|
-
for( int i=0; i<str.length(); i++ ) {
|
162
|
-
if( Character.UnicodeBlock.of( a[i] ).equals
|
163
|
-
( Character.UnicodeBlock.BASIC_LATIN ) ) {
|
164
|
-
count++;
|
165
|
-
}
|
166
|
-
else if( Character.UnicodeBlock.of( a[i] ).equals
|
167
|
-
( Character.UnicodeBlock.KATAKANA ) ) {
|
168
|
-
count+=2;
|
169
|
-
}
|
170
|
-
else if( Character.UnicodeBlock.of( a[i] ).equals
|
171
|
-
( Character.UnicodeBlock.HIRAGANA ) ) {
|
172
|
-
count+=2;
|
173
|
-
}
|
174
|
-
else if( Character.UnicodeBlock.of( a[i] ).equals
|
175
|
-
( Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS) ) {
|
176
|
-
count+=2;
|
177
|
-
}
|
178
|
-
}
|
179
|
-
return count;
|
180
|
-
}
|
181
47
|
|
182
48
|
}
|
183
49
|
```
|
2
質問タイトルの変更
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
テーブルに合わせてハイフンを連続して表示させたい
|
body
CHANGED
File without changes
|
1
書式の改善
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
|
-
|
3
2
|
テキストファイルの情報を読み込みそれを基に、以下のような表を作りたいです。
|
4
3
|
また、条件として、
|
5
4
|
①項目名は中央揃え、名前は左揃え、点数は右寄せ
|
@@ -36,12 +35,11 @@
|
|
36
35
|
|田中ゆうき |国語| 80|
|
37
36
|
-
|
38
37
|
|佐藤かつひこ|数学| 50|
|
39
|
-
|
38
|
+
```
|
40
39
|
|
41
40
|
### 該当のソースコード
|
42
41
|
|
43
42
|
```java
|
44
|
-
|
45
43
|
class Sample {
|
46
44
|
|
47
45
|
|