为了账号安全,请及时绑定邮箱和手机立即绑定

赋值问题,菜鸟求助大神啊,这代码什么问题?

赋值问题,菜鸟求助大神啊,这代码什么问题?

Roy_Hatsune 2016-11-16 00:08:01
为什么这里的combArray是空的而下面这里明明给combArray赋值了呀源代码如下:import java.util.ArrayList;import java.util.List;public class FindCombination { private int begin, end;// 组合最小、大长度 // number长度的组合集合 private List<CombNode> combArray = new ArrayList<CombNode>(); // begin-end长度的组合集合 private List<List<CombNode>> combBalls = new ArrayList<List<CombNode>>(); public FindCombination(CombNode[] array, int begin, int end) {//初始器 this.begin = begin; this.end = end; if (array == null || array.length == 0 || begin > end) { System.out .println("wrong,the reason maybe is :\"array==null\" or \"array.length == 0\" or \"begin>end\""); return; } List<CombNode> list = new ArrayList<CombNode>(); for (int length = begin; length <= end; length++) { combination(array, 0, length, list); combBalls.add(combArray); System.out.println("#######"); System.out.print("初始器里combArray:"); for (int i = 0; i < combArray.size(); i++) { System.out.print(combArray.get(i).getValue() + " "); } System.out.println(); System.out.println("#######"); combArray.clear(); } } //递归选取元素 private void combination(CombNode[] array, int begin, int length, List<CombNode> list) { if (length == 0) { combArray = list; for (int i = 0; i < combArray.size(); i++) { System.out.print(combArray.get(i).getValue() + " "); } System.out.println(); return; } if (begin == array.length) { return; } list.add(array[begin]); combination(array, begin + 1, length - 1, list); list.remove(array[begin]); combination(array, begin + 1, length, list); } public List<CombNode> getXLengthCombination(int length) {//获取x长度的所有组合 if (length < begin || length > end) { System.out .println("wrong,the length must be greater than begin and less than end at the same time"); return null; } return combBalls.get(length); } public void printCombination() {// 打印所有组合 for (int i = 0; i < combBalls.size(); i++) { for (int j = 0; j < combBalls.get(i).size(); j++) { System.out.print(combBalls.get(i).get(j).getValue() + " "); } System.out.println(); } } public static void main(String[] args) { String[] array = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }; // int[] array={1,2,3,4,5,6,7,8,9,10}; CombNode[] cn = new CombNode[10]; for (int i = 0; i < array.length; i++) { cn[i] = new CombNode(array[i], true); } System.out.println("\n***********"); FindCombination fc = new FindCombination(cn, 1, 2); System.out.println("***********"); System.out.println("通过方法打印"); fc.printCombination(); }}
查看完整描述

1 回答

已采纳
?
按照自己的节奏前行

TA贡献90条经验 获得超70个赞

你每次将数据放入list的后,此时你的list地址值传给combArray,即此时的combArray就是List,然后你将list的数据删除,嗯,combArray与list指向同一块内存区域,也就是所combArray也删除了数据,最后你的combArray和list依旧指向同一块数据,此时的list为空,comAbrray当然也为空了.最后没有数据,你想输出什么,再就是没搞懂的是,你就是想验证个赋值问题,用得着敲这么长的代码作死吗?基本没人想看...还有,即使你不把combArray.clear()清空,也没有数据的,因为之前就已经没有数据了.觉得自己递归写的好,那就去算法区,不想说你了!!!

查看完整回答
1 反对 回复 2016-11-16
  • Roy_Hatsune
    Roy_Hatsune
    那我怎样才能存到list的值给combArray呢
  • 按照自己的节奏前行
    按照自己的节奏前行
    简单呀,你只要不删除你在list里面的数据就行,你把你写的代码简化会不会,先拿list装,然后给combArray,就是你说的那个赋值,这里因为是对象,所有你使用等于的时候,这俩变量指向的是同一块内存,就这么简单
  • 1 回答
  • 0 关注
  • 1106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信