问题描述
packagealgorithm;/***混合进制计数类*其中最高位(仅一位)为26进制(英文字母表示),除最高位外(共N-1位)用36进制([0~9-A-Z])来表示*/publicclassMixBaseCounter{privatestaticfinalStringBufferbase26=newStringBuffer("ABCDEFGHIJKLMNOPQRSTUVWXYZ");privatestaticStringBuffermixBaseStr=newStringBuffer();//表示36进制的部分,即低位其余的部分privatestaticintdigit=0;//表示整个串的位数如A0001==5,不含最终带后缀的完整串privatestaticLongcount=0L;//计数器(低位)privatestaticIntegerhighCount=0;//高位计数器A==0,初值为0,进位则递增,如B==1protectedstaticLongMaxValue=0L;//根据低位的位数,其临界值相应有不同,低位为3,则MaxValue为46656base36表示为1000,46655为ZZZprivatestaticObjectlockObject=newObject();publicMixBaseCounter(finalintn,charappendix){for(inti=0;i<n+1;i++){mixBaseStr.append("0");}mixBaseStr.setCharAt(0,'A');mixBaseStr.setCharAt(n,appendix);digit=n;//记录下来混合字符串的位数MaxValue=Math.round(Math.pow(36,n-1));//记录base36部分所能表示的最大值}publicstaticStringBuffergetNext(){System.out.print("[Count]"+count+"tt");Stringtmp36=String.valueOf(Long.toString(count,36));//利用36进制表示某个(实际为数字的)字符串if(count.compareTo(MaxValue)<0){mixBaseStr.replace(mixBaseStr.length()-tmp36.length()-1,mixBaseStr.length()-1,tmp36);//右对齐置换尾数操作}elseif(count.compareTo(MaxValue)==0){synchronized(lockObject){highCount++;//需同步}count=0L;//低位计数器清零for(intj=1;j<digit;j++){//低位数字全部清零mixBaseStr.setCharAt(j,'0');}mixBaseStr.setCharAt(0,base26.charAt(highCount));//递增高位}synchronized(lockObject){count++;//需同步}returnmixBaseStr;}publicstaticvoidmain(String[]args){MixBaseCounterm=newMixBaseCounter(3,'_');for(intn=0;n<26*MaxValue;n++){System.out.println(getNext());}}}上述是我写的代码,不过仅能实现初级功能,若想此代码运行在多线程环境下,需要做怎样的修改?