问题描述
hi各位,JAVA新人向大家报道,我最近在写一个小程序:某集合A含元素{a,b,c}它所有的幂集就是:{a,b,c}{a,b}{a,c}{b,c}{a}{b}{c}到这里为止都很简单接下来呢,问题来了,要自行选取幂集中的几个元素,组成一个小组,每个元素的父集(超集)都必须包含在小组里,举两个例子更直观一些哈:比如我选了{b},那么我一定要选{a,b},{b,c},{a,b,c},因为它们都包含了{b};又比如我选了{a,c},那么我一定得再选{a,b,c},因为它包含了{a,c}.我需要想出一个办法,来测试每次选择的几个元素是不是都符合这个要求,目前为止就差这一步请教大家,期待有好的建议,提前谢谢大家!
解决方案
解决方案二:
这几种情况中没有其他的联系?集合里的数据,是独立的,没有办法关联啊,只有手动判断
解决方案三:
引用1楼xiaojiit的回复:
这几种情况中没有其他的联系?集合里的数据,是独立的,没有办法关联啊,只有手动判断
谢谢小强,应该没有,我也没想好这步应该怎么写只是设计了一个项A,定义所有幂集里的子集,做出每个选项,每勾选一个就自动add该子集,但是不知道用什么方法来检测结果......
解决方案四:
看了感兴趣写了个抛砖引玉。验证思路:所有的集合all选出的集合select剩下的集合noselect=all-selectselect中长度最短的元素的集合child如果noselect中还包含child中的元素则不符合要求反之则符合要求。
解决方案五:
publicclassTest{privatestaticSet<String>all=newHashSet<String>();static{all.add("a,b,c");all.add("a,c");all.add("b,c");all.add("a,b");all.add("c");all.add("b");all.add("a");}publicstaticvoidmain(String[]args){List<String>select=newArrayList<String>();select.add("a,b,c");select.add("a,b");select.add("a,c");select.add("a");List<String>child=newArrayList<String>();inti=4;for(Strings:select){if(s.length()<i){child.clear();child.add(s);i=s.length();}elseif(s.length()==i){child.add(s);}all.remove(s);}StringBuffernoselect=newStringBuffer();for(Strings:all){noselect.append(s);//System.out.println("s="+s);}booleansign=true;for(Strings:child){if(noselect.toString().indexOf(s)>-1){//System.out.println(noselect.toString());//System.out.println(s);sign=false;break;}}if(sign){System.out.println("你所选的集合符合要求");}else{System.out.println("你所选的集合不符合要求");}}}
解决方案六:
引用4楼kstring的回复:
publicclassTest{privatestaticSet<String>all=newHashSet<String>();static{all.add("a,b,c");all.add("a,c");all.add("b,c");all.add("a,b……
谢谢高人提供的思路和例子,很棒的解答方法!我把零食都吃光了都没想到这步.我试了一下,只是这一段里,List<String>child=newArrayList<String>();inti=4;for(Strings:select){if(s.length()<i){child.clear();child.add(s);i=s.length();}elseif(s.length()==i){child.add(s);}all.remove(s);}橙色的部分报错,说找不到select,很奇怪...