回答編集履歴

2

コードの誤りを訂正

2016/12/18 18:20

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -32,11 +32,21 @@
32
32
 
33
33
 
34
34
 
35
+ 追記:
36
+
37
+ 失礼、最初の例は間違ってました。List.sortはComparatorを渡さないといけないのでした。
38
+
39
+ なお下記の例は動作確認してません。
40
+
41
+ 他の方の回答も参考にして「プログラムのエラーを直す」ことを学んでいただければと思います。
42
+
43
+
44
+
35
45
  ```java
36
46
 
37
47
  // 単語と頻度を保持するクラスを作る
38
48
 
39
- class WordAndFreq implements Comparable<WordAndFreq> {
49
+ class WordAndFreq {
40
50
 
41
51
  String word;
42
52
 
@@ -47,14 +57,6 @@
47
57
  this.word = word;
48
58
 
49
59
  this.freq = freq;
50
-
51
- }
52
-
53
- @Override
54
-
55
- public int compareTo(WordAndFreq o) {
56
-
57
- return Double.compare(freq, o.freq);
58
60
 
59
61
  }
60
62
 
@@ -74,7 +76,19 @@
74
76
 
75
77
  // Listをソート
76
78
 
79
+ list.sort(new Comparator<WordAndFreq>() {
80
+
77
- list.sort();
81
+ @Override
82
+
83
+ public int compare(WordAndFreq o1, WordAndFreq o2) {
84
+
85
+ // return Double.compare(o1.freq, o2.freq); //昇順
86
+
87
+ return Double.compare(o2.freq, o1.freq); //降順
88
+
89
+ }
90
+
91
+ });
78
92
 
79
93
  // ソート結果を表示
80
94
 

1

追記

2016/12/18 18:20

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -17,3 +17,75 @@
17
17
 
18
18
 
19
19
  doc2の型の宣言が間違っているわけです。後の方はその影響で出ていたりしますね。初心者のうちは最初のエラーを直してからコンパイルして・・・というのを繰り返した方がいいかも知れません。変数の型の宣言を間違えていたりするとそれ以降エラーが沢山でてしまうので一度になおそうとしても難しいからです。
20
+
21
+
22
+
23
+ ---
24
+
25
+
26
+
27
+ 追記:降順
28
+
29
+
30
+
31
+ 変更後のコードではtfメソッドで出現頻度を返すようになってますね。これで単語と頻度が順番に求まりますが、降順に表示するには並べ替え(ソート)をする必要があります。ソートにはいろいろやり方がありますが、単語と頻度のように複数の要素を一塊としたデータをソートする例を挙げます。
32
+
33
+
34
+
35
+ ```java
36
+
37
+ // 単語と頻度を保持するクラスを作る
38
+
39
+ class WordAndFreq implements Comparable<WordAndFreq> {
40
+
41
+ String word;
42
+
43
+ double freq;
44
+
45
+ WordAndFreq(String word, double freq) {
46
+
47
+ this.word = word;
48
+
49
+ this.freq = freq;
50
+
51
+ }
52
+
53
+ @Override
54
+
55
+ public int compareTo(WordAndFreq o) {
56
+
57
+ return Double.compare(freq, o.freq);
58
+
59
+ }
60
+
61
+ }
62
+
63
+ ...
64
+
65
+ // まず頻度を調べながらWordAndFreqをListの要素として蓄積
66
+
67
+ List<WordAndFreq> list = new List<>();
68
+
69
+ for (String word : doc2) {
70
+
71
+ list.add(new WordAndFreq(word, tf(doc2, word)));
72
+
73
+ }
74
+
75
+ // Listをソート
76
+
77
+ list.sort();
78
+
79
+ // ソート結果を表示
80
+
81
+ for (WordAndFreq wf : list) {
82
+
83
+ System.out.format("%s: %4.1f\n", wf.word, wf.freq);
84
+
85
+ }
86
+
87
+ ...
88
+
89
+ ```
90
+
91
+