0

我目前正在拼命地尝试从函数返回的 ArrayList 到我的主函数中的新 ArrayList 中......

以下是代码片段:

public static ArrayList<String> permute(String begin, String end) {
ArrayList<String> al=new ArrayList<String>();
//filling bla
return al;
}

这是我在主函数中调用该函数的地方:

ArrayList<String> arr =permute("","abc");

不幸的是,arr 是空的,我不知道如何让它工作:(

提前致谢

编辑:这是完整的代码:

import java.util.*;
class Problem24 {

    public static ArrayList<String> permute(String begin, String end) {
        ArrayList<String> al=new ArrayList<String>();
        if (end.length() <= 1) {
            String s=begin+end;
            al.add(s);
        } else {
            for (int i = 0; i < end.length(); i++) {
                try {
                    String newString = end.substring(0, i) + end.substring(i + 1);
                    permute(begin + end.charAt(i), newString);
                } catch (StringIndexOutOfBoundsException exception) {
                    exception.printStackTrace();
                }
            }
     }
     return al;
  }
    public static void main (String[] args)
    {
        ArrayList<String> arr =permute("","abc");
            System.out.println(arr.get(0));
    }
}
4

6 回答 6

2

您的 ArrayList 为空但不为空,这意味着返回部分有效。为了使用方法中的值,您需要在方法内填充 ArrayList。

ps:您应该使用 List list = new ArrayList() 或 List list = permute("", "abc") 这是依赖注入的简单版本和更好的程序设计。

于 2013-02-28T13:10:24.087 回答
1

在返回值之前,请确保您正在填写al列表

     al.add(begin);
     al.add(end);
     al.add("any other string");

     return al;
于 2013-02-28T12:54:40.290 回答
1

显然这// filling bla部分有问题。

我会先用替换你的代码// filling blaal.add("TEST");看看你是否能得到一些东西。

此外,您的方法是静态的,并且未传入源数组,这表明您的代码应该以某种方式置换这些字符串。您是否可能对静态数组进行操作(即置换开始和结束之间的所有元素),并且源数组为空?

于 2013-02-28T12:57:05.883 回答
1

您没有从递归调用中添加项目。

尝试将 al.addAll 添加到您的 permute 调用中:

al.addAll(permute(begin + end.charAt(i), newString));
于 2013-02-28T13:19:13.433 回答
0
import java.util.*;
class Problem24
{

    public static ArrayList<String> permute(String begin, String end)
    {
        ArrayList<String> al=new ArrayList<String>();
        if (endingString.length() <= 1)
        {
            String s=begin+end;
            al.add(s);
        }
        else
        {
            for (int i = 0; i < end.length(); i++)
            {
                try
                {
                    String newString = end.substring(0, i) + end.substring(i + 1);
                    al.add(permute(begin + end.charAt(i), newString));
                }
                catch (StringIndexOutOfBoundsException exception)
                {
                    exception.printStackTrace();
                }
            }
        }
        return al;
    }

    public static void main (String[] args)
    {
            ArrayList<String> arr = permute("","abc");
            System.out.println(arr.get(0));
    }
}

希望我以正确的方式纠正它。

于 2013-02-28T13:25:27.383 回答
0

您反复调用您的方法 permute --- 但是您没有使用它返回时返回的内容。换句话说,您每次调用 permute 时都会创建一个新数组,但是您在 for 循环中获得的所有内容都会丢失,因为您没有将它传递给下一个 permute() 调用 --- 最终您返回一个空数组,您可以在其中什么都没放。

于 2013-02-28T13:41:51.800 回答