问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

我用JAVA写的字符统计小程序,请问为什么运行时出现OutOfMemoryError...

发布网友 发布时间:2024-10-14 02:09

我来回答

3个回答

热心网友 时间:2024-10-14 05:33

你的程序有些错误。
我给你分析了分析,你的错误。
(题外话:Java中String判断要用equals方法)
(但字面String常量也可以用==或不等号判断,但存在一定风险性)
问题出在这里
for(int j=0;j<stringList.size();j++)
{
if(ss!=stringList.get(j)) {
stringList.add(ss);
}
}
你想一下哦~
只要出现不同就添加到stringList中,想象一下如果数据是
aa bb aa dd aa cc aa
这样的话,第三个aa虽然与第一个aa相同,但是却与第二个bb不同,
所以会导致aa会重复的添加到stringList当中。
如果数据量较大的话,添加的数据将是非常严重的。
判断不同的单词,就是判断数据的唯一性。
也就是说,如果数据在stringList中1次都没出现过,那么就添加。
注意我说的是“1次都没有出现过”
(所以说要遍历完整个list后才能知道)
所以要用一个boolean表示这次遍历stringList是否出现过相同内容。
false表示出现过,true表示没有。

以下是修改后的部分代码如下:
System.out.println("共有单词数为: " + s.length + "个");
boolean f = true;
List<String> stringList = new ArrayList<String>();
for (int i = 0; i < s.length; i++)
{
String ss = s[i];
if (stringList.size() != 0)
{
for (int j = 0; j < stringList.size(); j++)
{
if (ss.equals(stringList.get(j)))
{
f = false;
}
}
if (f!=false)
{
stringList.add(ss);
}
else
{
f = true;
}
}
else
{
stringList.add(ss);
}
}
System.out.println("不同的单词共有: " + stringList.size() + "个");

热心网友 时间:2024-10-14 05:32

超出范围了,你看看你 Sring里写了多少东西

热心网友 时间:2024-10-14 05:29

你以下这段代码写的不好:

List<String> stringList = new ArrayList<String>();
for(int i=0;i<s.length;i++) {
String ss = s[i];
if(stringList.size()!=0) {
for(int j=0;j<stringList.size();j++) {
if(ss!=stringList.get(j)) {
stringList.add(ss);
}
}
} else {
stringList.add(ss);
}
}
System.out.println("不同的单词共有: "+stringList.size()+"个");

这个算法是有问题的,别的不说,单就
ss!=stringList.get(j) 这种写法就不好,对象间比较应该用equals方法,除非你想比较对象本身是否是一个对象,而不是对象的内容。

用下面的简单方法:

List<String> stringList = new ArrayList<String>();
for(int i=0;i<s.length;i++) {
if(!stringList.contains(s[i])) { //用List的contains方法来判断是否重复
stringList.add(s[i]); //只添加没有的
}
}
System.out.println("不同的单词共有: "+stringList.size()+"个");
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
巴西龟最长活多久,家养!!! 养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 成都五大花园到成都火车东站的公交路线 在写一个有接口的java小程序的时候出现,没办法保存,请大神指教 谢谢 小学生毕业留言 小学毕业留言说说 九尾狐专里的螭是谁 如何给小学毕业生写留言 组装一台可以玩DNF双开打团的电脑要多少钱 河北省内有哪个大学开设了地理信息系统专业,能够业余或者脱产学习?_百度... 邯郸市永聚勘测规划设计有限公司怎么样? 邯郸市和普地理信息技术有限公司怎么样? 悲惨世界里的所有四字词语 中智西安经济技术合作有限公司汉中分公司怎么样? 怎么夸女上司比较合适? 中智西安经济技术合作有限公司客户专员待遇怎么样 柳市行政中心能不能办理外地户口离婚证 待产包提前多久收拾好 柳市未婚证明哪里开 乐清市民政局直属单位 不是成都本地户口。在成都办理居住证怎么办? 我的是红米note 我想把东西搬到外置内存卡里 好像没有这功能 或是有... 成都五大花园到火车东站怎么坐车 从五大花园到成都火车东站怎么走?打车大概需要多少钱 一个java小程序,在doc中运行出现Exception in thread "main" java.lan... 犬瘟抗体6级为什么还得犬瘟 狗狗为什么的犬瘟热 为什么狗狗突然会得犬瘟 狗狗因为什么犬瘟 狗狗为什么会发狗瘟 狗狗打了疫苗为什么会得犬瘟热 有什么柚子皮的做法大全分享? qq头像更新不了,在资料卡里点了头像也没用,加载完了之后是他们改的头像... 汇票是什么证券 i7和i9有什么区别?哪个好? i9和i7哪个强? 什么什么放眼量 已知四氯化碳(CCl4)是一种不能溶于水密度比水大也不能和氯化氢气体反应... 网游天龙八部,多少级开始学技能 悬赏十分,尽量详细!天龙八部怎么学门派技能?什么程度才可以使用门派技能... 天龙八部自己的门派技能在哪里查看啊? 锤子手机老总是宋祖英老公吗