在很多帮助下,我开发了一种制作变位词的方法,然后将它们添加到ArrayList
中。
public void f(String s, String anagram, ArrayList<String> array)
{
if(s.length() == 0)
{
array.add(anagram);
return;
}
for(int i = 0 ; i < s.length() ; i++)
{
char l = s.charAt(i);
anagram = anagram + l;
s = s.substring(0, i) + s.substring(i+l, s.length());
f(s,anagram,array);
}
}
问题是,当我试图在一个将String
s从一个ArrayList
添加到另一个的循环中使用此函数来生成ArrayList
s时,我收到一个错误,说我不能使用void,并且方法f()
是void。
List<String> Lists = new ArrayList<String>(); //makes new array list
for(String List : words)
{ //takes values from old array list
List.trim();
Lists.add(f(List,"",new ArrayList<String>())); //this is where it doesn't work
}
让我再次澄清:我想使用这个函数将ArrayList
的变位词插入到另一个ArrayList
的每个位置。变位符列表源自从一个列表读取到另一个列表的String
。我尝试将该方法更改为静态,但不起作用,我还删除了该方法中的return;
一次,但也无法修复它。
我该如何让这一切正常工作?
发生错误是因为方法f()
是void
,意思是:它不返回任何可以添加到ArrayList
的值。
调用f()
的答案存储在作为参数传递给f
的ArrayList
中,您可能应该使用ArrayList
将其所有元素添加到Lists
中。类似这样的东西:
List<String> lists = new ArrayList<String>();
for (String list : words) {
list.trim();
ArrayList<String> answer = new ArrayList<String>();
f(list, "", answer);
lists.addAll(answer);
}
F的方法头需要如下所示:
public String f(String s, String anagram, ArrayList<String> array)
然后返回一个String值,将其添加到正在使用的ArrayList中。
f()
的函数定义显示类型为void
的返回值。因此,看看你的代码,你正试图这样做:
Lists.add(void);
这显然是非法的。
您的选择实际上是在更大的范围内声明ArrayList。
private List<String> anagrams;
public void f(String s, String anagram) {
...
anagrams.add(anagram);
...
}
....
for(String List : words) {
//takes values from old array list
anagrams = new ArrayList<String>();
List.trim();
f(list,"");
Lists.add(anagrams); //this is where it doesn't work
}