2

在很多帮助下,我开发了一种方法,可以制作字谜,然后将它们添加到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);
    }
}

问题是当我尝试使用此函数在将s 从一个添加到另一个ArrayList的循环中生成s 时,我收到一条错误消息,提示我不能使用 void,并且该方法为 void。StringArrayListf()

        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
        }

让我再次澄清一下:我想使用此功能将ArrayLists of anagrams 插入 another 中的每个位置ArrayList。字谜列表源自String从一个列表读取到另一个列表的 s。我尝试将方法更改为静态,但这不起作用,我还删除了return;方法中的一次,但这也不能解决它。

我如何让这整个事情发挥作用?

4

3 回答 3

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);
}
于 2013-03-13T21:32:24.843 回答
0

您的 F 方法标头需要如下所示:

public String f(String s, String anagram, ArrayList<String> array)

然后您返回一个字符串值以添加到您正在使用的 ArrayList 中。

于 2013-03-13T21:34:20.320 回答
0

您的函数定义f()显示 type 的返回值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
 }
于 2013-03-13T21:36:49.410 回答