在很多帮助下,我开发了一种制作字谜的方法,然后将它们添加到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);
}
}
问题是,当我尝试使用此功能在ArrayList
的循环中将String
从ArrayList
添加到另一个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
中的每个位置。 anagram列表源自return;
s,从一个列表读取到另一个列表。我尝试将方法更改为静态,但这不起作用,我也删除了方法中的{{1}}一次,但这也没有解决它。
如何使整个过程发挥作用?
答案 0 :(得分:7)
发生错误是因为方法f()
为void
,这意味着:它不会返回任何可以添加到ArrayList
的值。
调用f()
的答案存储在作为ArrayList
参数传递的f
中,你应该使用那个 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);
}
答案 1 :(得分:0)
F的方法标题需要如下所示:
public String f(String s, String anagram, ArrayList<String> array)
然后返回一个String值以添加到您正在使用的ArrayList中。
答案 2 :(得分:0)
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
}