我试图在java中使用递归将句子的每个单词添加到一个集合中。标点符号无关紧要。
我的问题是,在打印列表后,只打印了句子的第一个单词。
例如句子" One Two Three Four"我的名单中会出现[One]。
int **ptrvectorInt(long dim1) {
int **v;
if (!(v = malloc(dim1 * sizeof(int*)))) {
PyErr_SetString(PyExc_MemoryError,
"In **ptrvectorInt. Allocation of memory for integer array failed.");
exit(0);
}
return v;
}
我有什么遗失或忽视的东西吗?
答案 0 :(得分:1)
你应该将你的递归函数的返回值的结果添加到你的结果集中,(你也没考虑最后一个单词),像这样(我在评论中给出解释)
public static TreeSet<String> getWordSet(String words) {
TreeSet<String> result = new TreeSet<String>();
int index = words.indexOf(" ");
if (index < 0 && words.length() == 0) {
return result;
}else if (index < 0 && words.length() > 0) { // here you didnt consider the last word
result.add(words);
} else {
result = getWordSet(words.substring(index + 1)); //here we first get result of recursion then add our new value to the list
result.add(words.substring(0, index));
}
return result;
}
答案 1 :(得分:0)
照顾范围。您的TreeSet是一个局部变量,每次使用新函数调用该函数时,它都会被覆盖。
尝试将其声明为函数外的全局变量。
答案 2 :(得分:0)
private static TreeSet<String> result = new TreeSet<String>();
public static TreeSet<String> getWordSet(String words) {
int index = words.indexOf(" ");
if (index < 0 && words != null) {
return result;
} else if (index < 0 && words.length() > 0) {
result.add(words);
} else {
result = getWordSet(words.substring(index + 1));
result.add(words.substring(0, index));
}
return result;
}
答案 3 :(得分:0)
我只会将您的动态编程作为练习来解决,请注意,这种解决方案不是解决您任务的好方法。
在你的方法的每次调用中,你实例化一个新的Set,你最终会扔掉它,然后返回第一个包含第一个单词的Set。您需要在递归方法之外创建集合对象,然后通过引用传递它,如下所示:
public static void main (String[] args) throws java.lang.Exception
{
Set<String> set = new TreeSet<String>();
getWordSet("get word set", set);
System.out.println(set.toString());
}
public static void getWordSet(String words, Set set) {
int index = words.indexOf(" ");
if (index < 0) {
if (words.length() > 0) set.add(words);
} else {
set.add(words.substring(0, index));
getWordSet(words.substring(index + 1), set);
}
}
如果输入字符串不以空格结尾,则行if (words.length() > 0) set.add(words);
将添加最后一个单词。
在这里演示:http://ideone.com/ruEMjA
答案 4 :(得分:0)
这是基于原始实现的递归解决方案。
import java.util.TreeSet;
public class RecursiveSplit {
public static TreeSet<String> getWordSet(String sentence, TreeSet<String> mySet) {
int index = sentence.indexOf(" ");
if (index < 0)
if (sentence.length()>0)
index = sentence.length() - 1;
else
return mySet;
mySet.add(sentence.substring(0, index));
getWordSet(sentence.substring(index+1), mySet);
return mySet;
}
public static TreeSet<String> getWordSetDriver(String sentence){
TreeSet<String> blankSet = new TreeSet<String>();
return getWordSet(sentence, blankSet);
}
public static void main(String[] args) {
for (String s : getWordSetDriver("This is a sentence.")) {
System.out.println(s);
}
}
}
递归地解决问题..我不知道你为什么打算这样做,但这不是最好的方法。