当前位置: 首页 > 知识库问答 >
问题:

如何将字符串输出添加到递归中的数组

颜文昌
2023-03-14

我正在编写一个递归过程来返回字符串的排列

我将所需的输出打印到控制台。但是,我希望将输出添加到一个数组中,以便能够对其进行进一步的处理。怎么才能实现?

import java.util.*; 

public class Permutation { 

    public static void main(String args[]) {
        permute("A", "BCD");
    }

    public static void permute(String FirstElement, String Remainder) {

        List<String> mylist_tobuild = new ArrayList<String>();      

        if (Remainder.length() <= 1) {
            FirstElement =  FirstElement+Remainder;
            //  System.out.println(FirstElement);

            mylist_tobuild.add(FirstElement);
            System.out.println(mylist_tobuild);
        }
        else
            for (int i = 0; i < Remainder.length(); i++) {
                try {
                  String newString = Remainder.substring(0, i) + Remainder.substring(i + 1);
                  permute(FirstElement + Remainder.charAt(i), newString);
                } catch (StringIndexOutOfBoundsException exception) {
                  exception.printStackTrace();
                }
            } 
    } 
}

我得到:[ABCD][ABDC][ACBD][ACDB][ADBC][ADCB]

我想要:[ABCD、ABDC、ACBD、ACDB、ADBC、ADCB,]

共有2个答案

费锋
2023-03-14

每次执行permute方法时,您都在创建一个新的列表。要解决这个问题,您可以将列表创建从方法中去掉(例如,创建一个静态字段),这样就不会在每次循环时都创建一个新的列表。然后在你的主类中,在你的排列方法之后添加你的print语句,这样你就可以得到最终的结果。

    private static ArrayList<String> mylist_tobuild;

    public static void main(String args[]) {
        mylist_tobuild = new ArrayList<>(); //initialize list here once
        permute("A", "BCD");
        System.out.println(mylist_tobuild);
    }
终祯
2023-03-14

您可以提供<code>List</code>作为参数

public static void main(String args[]) {
    List<String> perms = new ArrayList<>();
    permute("A", "BCD",perms);
    System.out.println(perms);
}

public static void permute(String FirstElement, String Remainder, List<String> perms) {

    if (Remainder.length() <= 1) {
        FirstElement =  FirstElement+Remainder;
        perms.add(FirstElement);
    } else {
        for (int i = 0; i < Remainder.length(); i++) {
            try {
                String newString = Remainder.substring(0, i) + Remainder.substring(i + 1);
                permute(FirstElement + Remainder.charAt(i), newString, perms);
            } catch (StringIndexOutOfBoundsException exception) {
                exception.printStackTrace();
            }
        }
    } 
} 
 类似资料:
  • 问题内容: 我是Java新手,所以我几乎不需要帮助 我有 我想向此数组(脚本)添加新的字符串(string1,string2)作为示例 我想在以后的阶段中不添加新字符串 我该怎么办? 问题答案: 您无法在Java中调整数组的大小。 声明数组的大小后,它将保持固定。 相反,您可以使用具有动态大小的对象,这意味着您无需担心其大小。如果数组列表的大小不足以容纳新值,则它将自动调整大小。

  • 问题内容: 我试图将字符串数组作为参数传递给Wetland类的构造函数;我不明白如何将字符串数组的元素添加到字符串数组列表。 问题答案: 您已经具有内置方法:- 注 : -您应该使用没有。 返回一个不同的-> ,不能将其类型转换为。 然后,您将不得不使用方法,这不是很好。所以就用 注意 :-返回的列表是固定大小的列表。如果要向列表中添加某些内容,则需要创建另一个列表,并用于向其中添加元素。所以,那

  • 我想做一个函数,将字符串添加到字符串中 我这样尝试过: 主要功能 在addLine(字符串文本,字符串行) 我知道=在java中的String make new实例之间的操作。但是,上层代码不起作用。 我如何制作一个向字符串添加字符串的函数?

  • 问题内容: 我在Java程序中有两个字符串,我想以某种方式混合以形成两个新字符串。为此,我必须从每个字符串中提取一些构成字符并将其添加以形成新的字符串。我有这样的代码(this.eka和this.toka是原始字符串): 我正在获取.charAt(x)部分的数字,那么如何将字符转换为字符串? 问题答案: 只使用永远使用代替 例如,当位置arent不是固定值而变量 其中x,y,z是保存从中提取位置的

  • 问题内容: 当我使用定义变量时,该字符串不会添加到字符串池中,对吗? 现在,当我定义另一个而不是时,我将其定义为突然。(或我的大学老师说)。这是为什么?是什么使这个字符串突然变成字符串池字符串? 问题答案: 当我用new定义一个StringBuffer变量时,该字符串没有添加到字符串池中,对吗? 创建a 根本不会创建a 。 现在,当我定义另一个StringBuffer而不是new时,我突然将其定义

  • 问题内容: 使用Python v2,我在程序中运行一个值,该值末尾将一个数字四舍五入到小数点后两位: 像这样: 有没有办法在小数点后每三位插入一个逗号值? 即:10000.00变成10,000.00或1000000.00变成1,000,000.00 谢谢你的帮助。 问题答案: 在Python 2.7和3.x中,可以使用格式语法 这是在记录PEP 378 -格式说明千位分隔符 并且在一个例子官方文档