场景:
String[][]arr1=new String[3][]; arr1[0]=new String[]{"a","[^a]"}; arr1[1]=new String[]{"b","[^b]"}; arr1[2]=new String[]{"c","[^c]"};
把arr1[0],arr1[1],arr1[2] 进行组合,组合的规则:
(1){"a","[^a]"} X {"b","[^b]"} X{"c","[^c]"}
(2)组合的结果中必须同时有arr1[0],arr1[1],arr1[2]中的一个元素.
比如"abc"就是正确的,a[^b]b就是错误的,因为a[^b]b没有{"c","[^c]"}中的元素.
"acb"是错误的,因为没有按顺序
/*** * * @param a * @param aa * @param index : 初始值为0 */ public static List<StringBuffer> cc(String[][] aa,int index,List<StringBuffer> list){ if(index>=aa.length){//说明已经遍历完成 return list;//并不是每次循环都会执行,最后才会执行此语句. } String cc[]=aa[index]; int length=cc.length; List<StringBuffer> listNew=new ArrayList<StringBuffer>(); if(list==null||list.size()==0){//首次循环 for(int i=0;i<length;i++){ listNew.add(new StringBuffer(cc[i])); } }else{ for(int i=0;i<length;i++){ for(int j=0;j<list.size();j++){ StringBuffer sb=list.get(j); StringBuffer sb2=new StringBuffer(sb); sb2.append(cc[i]); listNew.add(sb2); } } } List<StringBuffer> list33=cc(aa, ++index, listNew); if(!ValueWidget.isNullOrEmpty(list33)){ return list33; } return null; } /*** * 组合 * @param aa * @return */ public static List<StringBuffer>assemble(String[][] aa){ return cc(aa, 0, null); }
测试1:
@Test public void tset_cc(){ String[][]arr1=new String[3][]; arr1[0]=new String[]{"a","[^a]"}; arr1[1]=new String[]{"b","[^b]"}; arr1[2]=new String[]{"c","[^c]"}; List<StringBuffer> list=assemble(arr1); System.out.println(list.size()); System.out.println(list); }
测试结果:
8 [abc, [^a]bc, a[^b]c, [^a][^b]c, ab[^c], [^a]b[^c], a[^b][^c], [^a][^b][^c]]
测试2:
@Test public void tset_cc2(){ String[][]arr1=new String[3][]; arr1[0]=new String[]{"a"}; arr1[1]=new String[]{"b"}; arr1[2]=new String[]{"c"}; List<StringBuffer> list=assemble(arr1); System.out.println(list.size()); System.out.println(list); }
测试结果:
1 [abc]
测试3:
@Test public void tset_cc2(){ String[][]arr1=new String[2][]; arr1[0]=new String[]{"a","1","one"}; arr1[1]=new String[]{"b","2","two"}; // arr1[2]=new String[]{"c","3"}; List<StringBuffer> list=assemble(arr1); System.out.println(list.size()); System.out.println(list); }
测试结果:
9 [ab, 1b, oneb, a2, 12, one2, atwo, 1two, onetwo]
相关推荐
java组合模式例子
java实现组合模式,java实现组合模式。
java 组合式异步编程CompletableFuture
NULL 博文链接:https://xieyan30.iteye.com/blog/1814117
java编写的组合模式例子,建造一个工厂
简单的组合算法,一个递归的应用示例,递归减少了很多代码
设计模式--组合模式java例子
System.out.println("对整数数组进行组合:C(n,n)"); int[] intArray=new int[4]; for(int i=0;i;i++){ intArray[i]=i+1; } System.out.println("对整数数组进行组合:C(4,4)"); Combination ...
正所谓,道生一,一生二,二生三,三生万物,如果将二进制表示和运算看做一,将基本数据类型看做二,基本数据类型形成的类看做三,那么,类的组合以及下节介绍的继承则使得三生万物。
jdk11安装包及eclipse安装包 及其安装配置方法 和一些jre插件 jdk11API文档 适合初学java的朋友使用jdk11安装包及eclipse安装包 及其安装配置方法
本资源包含由Java设计模式中的“组合模式”实现的“五子棋”所有源代码,需要的朋友可以下载哦!
像这样的日志代码会更好: if (log.isLoggable(Level.FINE)) { log.log(Level.FINE, "I am here, and the value of X is {} and Y is {}",...假定你已经完成了分析,并且判断出是运行环境中Java 组件的性能需要改善。
java设计模式【之】组合模式【源码】【场景:遍历目录树】 * 组合模式 * 将对象组合成树结构,表示 “部分与整体” 的关系 * 要求 部分与整体,具备相同的父类 * * 代码实现 * 输出当前目录下,全部目录层级...
组合计算
主要帮助大家轻松掌握java组合模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Java排列组合_组合算法,利用list及set的无序性, 通过递归实现,不同于以往的排列组合 自娱自乐
排列组合 排列 组合 java排列组合算法 排列组合算法
HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 ...
组合数学 - 程序员的高数,感兴趣的人看一下吧
html5开发