有趣的java代码 java优雅代码

一个有趣的Java问题我用的是扩展思想
以4为例
(1)n=1时,子集是{{1},{2},{3},{4}}
(2)n=2时 , 在n=1的基础上增加 , 取n=1每个子集中的最大数max,如果还有数 比这个max大,说明这个子集可以扩展
{1}改为 {1,2},{1,3},{1,4}(max=1)
{2}改为 {2,3},{2,4}(max=2)
{3}改为 {3,4}(max=3)
{4}由于没有数比max大,所以删除{4}(max=4)
这样得到的结果是{{1,2},{1,3},{1,4},{2,3},{2,4},{3,4}}
(3)n=3时,在n=2的基础上增加,取n=2每个子集的最大数
{1,2}改为{1,2,3},{1,2,4}(max=2)
{1,3}改为{1,3,4}(max=3)
{1,4}删除(max=4)
{2,3}改为{2,3,4}(max=3)
{2,4}删除(max=4)
{3,4}删除(max=4)
这样得到的结果是{{1,2,3},{1,2,4},{1,3,4},{2,3,4}}
(4)n=4时,在n=3的基础上修改,很明显,只有{1,2,3}能扩展
所以n=4时的子集是{{1,2,3,4}}
我的设计思想就是这样
下面是原代码
import java.util.Vector;
public class SubSet{
public static void main(String[] args){
int baseNumber=5;
VectorVector all=new VectorVector();
StringBuffer sb=new StringBuffer();
for(int i=1;i=baseNumber;i++){//外层循环控制子集组合的个数
Vector inner=new Vector();
sb.append(i);
if(ibaseNumber)
sb.append(",");
inner.add(i);
if(ibaseNumber)
all.add(inner);
}
System.out.println(sb.toString());
System.out.println("size="+baseNumber);
for(int i=2;i=baseNumber;i++){//控制基数
int size=all.size();
for(int j=0;jsize;j++){
Vector temp=(Vector)all.get(j);
int last=(Integer)temp.lastElement();
for(int k=last+1;k=baseNumber;k++){
Vector added=new Vector(temp);
added.add(k);
all.add(added);
}
}
// System.out.println(all);
/// System.out.println(size);
// printVectorVector(all);
for(int n=0;nsize;n++){
all.remove(0);
}
//System.out.println(all);
printVectorVector(all);
System.out.println("size="+all.size());
}
//主循环结束
}
//main() End
static void printVector(Vector v){
StringBuffer sb=new StringBuffer();
for(int i=0;iv.size();i++){
sb.append(v.get(i));
}
System.out.print(sb.toString());
}
//打印嵌套的Vector
static void printVectorVector(VectorVector vv){
for(int i=0;ivv.size();i++){
printVector(vv.get(i));
if(i!=vv.size()-1)
System.out.print(",");
}
System.out.println();
}
}
GitHub上面有哪些经典的java框架源码Bazel:来自Google有趣的java代码的构建工具有趣的java代码,可以快速、可靠地构建代码 。
Gradle:使用Groovy(非XML)进行增量构建,可以很好地与Maven依赖管理配合工作 。
Buck:Facebook构建工具 。
字节码操作
编程方式操作字节码的开发库 。
ASM:通用底层字节码操作和分析开发库 。
Byte Buddy:使用流式API进一步简化字节码生成 。
Byteman:在运行时通过DSL(规则)操作字节码进行测试和故障排除 。
Javassist:一个简化字节码编辑尝试 。
集群管理
在集群内动态管理应用程序的框架 。
Apache Aurora:Apache Aurora是一个Mesos框架,用于长时间运行服务和定时任务(cron job) 。
Singularity:Singularity是一个Mesos框架,方便部署和操作 。它支持Web Service、后台运行、调度作业和一次性任务 。
代码分析
测量代码指标和质量工具 。
Checkstyle:代码编写规范和标准静态分析工具 。
Error Prone:将常见编程错误作为运行时错误报告 。
FindBugs:通过字节码静态分析查找隐藏bug 。

推荐阅读