下面是我的一个简单数组问题的代码,我必须将一个字符串放入一个数组(完成),然后扫描数组中的唯一单词,将它们放入一个单独的数组中,并计算有多少单独的单词在第3个和最后一个数组的字符串中。我可以打印出字符串,但它会计算每个单词,但不是唯一的单词。我认为问题在于if语句或uwords增量。 任何帮助表示感谢,但我宁愿提示答案,而不仅仅是答案,如果可能的话!
String[] words = text.split(" ");
String[] uwords = new String[words.length];
int[] wordcount = new int[words.length];
for(int i=0; i<words.length; i++){
for(int e = 0; i<words.length; e++){ //loop to count individual words
if(words[i].equals(uwords[e])){ //If word in array is contained in the unique words arrary then increment
wordcount[wordcounter] = wordcounter+ 1;
}else{ //else (word is not contained in uwords) add to uwords and increment
uwords[e] = words[i];
wordcount[i] = wordcount[ + 1];
}
}
System.out.println(uwords[i] + ": " + wordcount[i]);
Pesudocode是:
Find unique words:
Create unique word array
Create unique word count array
For every word in text
if word exists in unique word array
Increment corresponding count in unique word count array
else
Add new unique word in unique word array
Increment corresponding count in unique word count array
List all unique words
答案 0 :(得分:2)
首先
for(int e = 0; i<words.length; e++)
是一个无限循环
有一种更简单的方法可以做到这一点。只需使用一组(Set<String> set = new Set<String>()
)
通过单词数组一次并将它们全部添加到集合中,它将自动添加尚未包含的单词。
然后,您可以继续调用集合中的每个项目,并为每个循环输出。 它还有一个长度属性来获取单词的数量。
答案 1 :(得分:0)
一般来说,使用两个或多个“并行”数组(其中相应索引上的元素构成单个对象)是一种糟糕的设计实践。
我尝试使用Map<String, Integer>
,其中每个键都是唯一的单词,其关联值是其计数。然后,循环将很简单:
Map<String, Integer> uWords = new HashMap<String, Integer>();
for(int i=0; i<words.length; i++){
String uWord = uWords.get(words[i])
Integer count = uWords.get(uWord);
if(count != null){
count++;
}
else{
count = 1;
}
uWords.put(uWord,count);
}
然后,您可以通过千种方式处理Map
以找到所需内容。
答案 2 :(得分:0)
感谢您提供伪代码,它更容易回答。问题是
if word exists in unique word array
Increment corresponding count in unique word count array
else
Add new unique word in unique word array
Increment corresponding count in unique word count array
与
不对应 for(int e = 0; i<words.length; e++){ //loop to count individual words
if(words[i].equals(uwords[e])){ //If word in array is contained in the unique words arrary then increment
wordcount[wordcounter] = wordcounter+ 1;
}else{ //else (word is not contained in uwords) add to uwords and increment
uwords[e] = words[i];
wordcount[i] = wordcount[ + 1];
}
}
您需要首先循环遍历uwords
中的所有单词以评估布尔表达式word exists in unique array
和然后执行if语句。