记录菌 2022-02-24 16:26 采纳率: 100%
浏览 67
已结题

递归组合中集合存放集合数据丢失

问题遇到的现象和发生背景

组合问题,利用递归回溯法,通过集合保存集合中的数据,递归方法内可以正常输出。mian方法里输出却为空。

问题相关代码,请勿粘贴截图
import java.util.*;
public class Backtracking {
    //组合问题
    //存放单组数据
    static List<Integer> data=new ArrayList<Integer>();
    static List<String> result=new ArrayList<>();
    static List<List> result2=new ArrayList<>();
    public static void main(String[] args) {
        diGui(4,2,1);
        System.out.println("这是保存的字符串结果:"+result);
        System.out.println("这是保存的集合结果:"+result2);

    }
    //n表示有多少个数,K表示遍历到第几层,startIndex从哪里开始遍历(当前遍历到的层数)
    public static void diGui(int n,int k,int startIndex){
        //定义集合临时接收数据
        if(data.size()==k){
            StringBuffer sb=new StringBuffer();
            for (int i = 0; i < data.size(); i++) {
                sb.append(data.get(i));
            }
            result2.add(data);
            System.out.println("这是保存的集合结果:"+result2);
            result.add(sb.toString());
            return;
        }
        for(int i=startIndex;i<=n;i++){
            //将每一层的数据加入到结果集中
            data.add(i);
            //开始递归深度遍历
            diGui(n,k,i+1);
            //回溯删除加入的元素
            data.remove(data.size()-1);
        }
    }
}
运行结果及报错内容
这是保存的集合结果:[[1, 2]]
 这是保存的集合结果:[[1, 3], [1, 3]]
这是保存的集合结果:[[1, 4], [1, 4], [1, 4]]
 这是保存的集合结果:[[2, 3], [2, 3], [2, 3], [2, 3]]
这是保存的集合结果:[[2, 4], [2, 4], [2, 4], [2, 4], [2, 4]]
这是保存的集合结果:[[3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4]]
这是保存的字符串结果:[12, 13, 14, 23, 24, 34]
这是保存的集合结果:[[], [], [], [], [], []]
我想要达到的结果

main方法中可以正常输出result2中的数据。

  • 写回答

4条回答 默认 最新

  • 於黾 2022-02-24 16:50
    关注

    list是引用类型
    你result2中的每个元素是data
    而data始终只有一个
    你在函数里不new它,而是不断的给它填充数据之后又把数据删掉
    最终data里面是空的,什么都没有

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月13日
  • 已采纳回答 3月5日
  • 创建了问题 2月24日

悬赏问题

  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元