那么 A 的高概率为 1,低概率为 1-pro=0.88,将 0.88 设为总长度,以此类推获
得所有字符的高概率与低概率。
特别注意:这里为了存储产生的数据
首先建立了一个类,这个类的三个属性为:
symbol 符号
low 低频值
high 高频值
类名:AlphLowHigh
这里同时使用了 Java 中的 List 类,List 类克服了 Map 类中一个键值只能对应
一个 value 的劣势,而 Map 类拥有不允许存在两个相同键值的优点(至少在该工
程是优点)。在这里 list 里存的每一个元素都是一个含有符号,低概率,高概
率三个属性的对象。
这里编码直接写在了主程序里,其核心代码为:
int Low=0;
int High=9999;
StringBuffer strBuf_out=new StringBuffer();
for(int i=0;i<length;i++){
// int NewLow=Low;
// int NewHigh=High;
System.out.println("the "+i+" time");
char temp_char=strBuf.charAt(i);
System.out.println("the char is "+temp_char);
int temp_index=test.getIndex(map, temp_char);
AlphLowHigh temp_symbol=(AlphLowHigh)list.get(temp_index);
double Low_pro=temp_symbol.getLow();
double High_pro=temp_symbol.getHigh();
int During=High-Low+1;
int NewLow=Low+(int)(During*Low_pro);
int NewHigh=Low+(int)(During*High_pro)-1;
System.out.println("temporary: "+"NewLow:"+NewLow+"
NewHigh"+NewHigh);
// Low=NewLow;
// High=NewHigh;
if((NewLow/1000)==(NewHigh/1000)){
int a=NewLow/1000;
char temp_out_char=(char)(a+48);
System.out.println("output :"+temp_out_char);
strBuf_out.append(temp_out_char);