|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
关于第二点:俺问问你,如果是企业级项目的话,诸如RMI,EJB,等一些关键技术,这些难道都不需要学么?如果光是使用jsp,servlet,javabean的话。
所谓的分列组合查询就相称于GOOGLE初级查询中“包括以下全体的字词”查询,也就是说查询中必需包括一切查询关头词,并且他们的按次能够是恣意。以下程序段完成了这一功效。好比输出查询关头字:tomtina则最一样平常的情形是在程序中利用相似于"selectsexfromstudentwherenamelike%tom%tina%ornamelike%tina%tom%orderedbyage"的查询语句完成以上的查询,因而怎样失掉%tina%tom%和%tom%tina%就是该程序和算法要完成的.
起首想到的就是写出一个分列组合的算法,然后用该算法输入所要查询关头字的一切情形,好比我输出了以下几个关头字:EGGAPPLETIME则要写一个程序输入这3个单词的一切分列情形,好比:EGGAPPLETIME情形2EGGTIMEAPPLE,情形3APPLEEGGTIME......不必说,人人一看就晓得应当是3的阶乘种情形也就是1*2*3这里就纷歧一列出了。
写出一段程序,大概一个函数好比:publicStringpaileizuhe(Stringinputstr){......}该函数前往一个分列组合好的QUERY字符串,好比利用该函数并付与他两个字符串参数(tom,tina)则:publicStringpailiezuhe("tom","tina");则输入:"selectsexfromstudentwherenamelike%tom%tina%ornamelike%tina%tom%orderedbyage"这里,我们体贴的是怎样天生tomtina的组合即%tina%tom%和%tom%tina%至于天生全部如上的字符串长短常复杂的只需用StringBuffer将那些常量吊挂起来最初组合一下就能够了.以下程序给出了分列组合输入的完成:
importjava.math.BigInteger;
importjava.util.*;
publicclassPermutationGenerator{
privateint[]a;
privateBigIntegernumLeft;
privateBigIntegertotal;
publicPermutationGenerator(intn){
if(n<1){
thrownewIllegalArgumentException("Min1");
}
a=newint[n];
total=getFactorial(n);
reset();
}
//------
//Reset
//------
publicvoidreset(){
for(inti=0;i<a.length;i++){
a[i]=i;
}
numLeft=newBigInteger(total.toString());
}
//------------------------------------------------
//Returnnumberofpermutationsnotyetgenerated
//------------------------------------------------
publicBigIntegergetNumLeft(){
returnnumLeft;
}
//------------------------------------
//Returntotalnumberofpermutations
//------------------------------------
publicBigIntegergetTotal(){
returntotal;
}
//-----------------------------
//Aretheremorepermutations?
//-----------------------------
publicbooleanhasMore(){
returnnumLeft.compareTo(BigInteger.ZERO)==1;
}
//------------------
//Computefactorial
//------------------
privatestaticBigIntegergetFactorial(intn){
BigIntegerfact=BigInteger.ONE;
for(inti=n;i>1;i--){
fact=fact.multiply(newBigInteger(Integer.toString(i)));
}
returnfact;
}
//--------------------------------------------------------
//Generatenextpermutation(algorithmfromRosenp.284)
//--------------------------------------------------------
publicint[]getNext(){
if(numLeft.equals(total)){
numLeft=numLeft.subtract(BigInteger.ONE);
returna;
}
inttemp;
//Findlargestindexjwitha[j]<a[j+1]
intj=a.length-2;
while(a[j]>a[j+1]){
j--;
}
//Findindexksuchthata[k]issmallestinteger
//greaterthana[j]totherightofa[j]
intk=a.length-1;
while(a[j]>a[k]){
k--;
}
//Interchangea[j]anda[k]
temp=a[k];
a[k]=a[j];
a[j]=temp;
//Puttailendofpermutationafterjthpositioninincreasingorder
intr=a.length-1;
ints=j+1;
while(r>s){
temp=a[s];
a[s]=a[r];
a[r]=temp;
r--;
s++;
}
numLeft=numLeft.subtract(BigInteger.ONE);
returna;
}
//程序测试出口
publicstaticvoidmain(String[]args){
int[]indices;
String[]elements={"1","2","3"};
PermutationGeneratorx=newPermutationGenerator(elements.length);
StringBufferpermutation;
while(x.hasMore()){
permutation=newStringBuffer("%");
indices=x.getNext();
for(inti=0;i<indices.length;i++){
permutation.append(elements[indices[i]]).append("%");
}
System.out.println(permutation.toString());
}
}
}
<p>
为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。 |
|