java - 下面简单的程序为:设计一个类,其中的两个域分别记录读取文本中单词和单词出现的次数,并用由这些对象构成的Set来维护列表
PHP中文网
PHP中文网 2017-04-17 17:13:35
0
1
271

问题: 出现ClassCastException
见下图 :
图片描述

程序代码如下:

import java.util.*;
import net.mindview.util.*;

class Words 
{
        String s ; 
        int i ; 
        public Words (String s , int i )
        {
                this . s = s ;
                this . i = i ;
        }
}
public class HoldingEx22 {
        public static void main(String[] args)
        {
                Set<String> words = new TreeSet<String>(
                        new TextFile("SetOperations.java", "\\W+"));
                System.out.println(words);
                
                Set <Words> wordSet = new TreeSet <Words> ( ) ;
                System.out.println( );
                for (String s : words)
                {
                        int count  = 0; 
                        for (String m : words)
                        {
                                if (s . equals (m) )
                                {
                                        count ++ ;
                                }
                        }
                        Words w = new Words (s , count - 1);
                        wordSet . add (w ) ; 
                }
                System.out.println(wordSet);
        }
}
PHP中文网
PHP中文网

认证0级讲师

全員に返信(1)
阿神

TreeSet は、順序付けされたデータ構造です。内部要素は、相互にサイズを比較する方法を認識する必要があります。したがって、TreeSet に配置できるクラス オブジェクトは、構築された Comparable インターフェイスを実装する必要があります。 Integer, String などのオブジェクトでは、このインターフェースは実装されていますが、自分で作成した Words クラスは実装されていないため、エラーが報告されます。

Comaparable インターフェースに関するいくつかの情報: http://stackoverflow.com/questions/3718383/why-Should-a-java-class-implement-comparable

コードがさまざまな単語をカウントしたいと考えているようですが、Set は繰り返される要素を 1 回しか保存しないため、System.out.println(words) の出力結果はすべて反復しない単語となり、その後のカウントは無意味になります。

Map<String, Integer> を使用して直接カウントできるため、Words クラスを実装する必要はありません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!