我用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()+"个");