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

问题: 出现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对于重复的元素只会存储一次,因此System.out.println(words)的输出结果都是不重复的单词,后面的计数没有意义。

可以直接用Map<String, Integer>来计数,这样也不必要实现Words类了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号