java for i 2_在for(int i=n;i<2*n-1;i++)提示数组下标越界,为什么?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

package huffman;

public class HuffmanTree {

private String charset;

private TriElement[]huftree;

public HuffmanTree(int[]weights){

this.charset="";

for(int i=0;i

this.charset+=(char)('A'+i);

int n=weights.length;

this.huftree=new TriElement[2*n-1];

for(int i=0;i

this.huftree[i]=new TriElement(weights[i]);

for (int i=n;i<2*n-1;i++)

{ int min1=Integer.MAX_VALUE,min2=min1;

int x1=-1,x2=-1;

for(int j=0;j

if(this.huftree[j].parent==-1)

if(this.huftree[j].data

{min2=min1;

x2=x1;

min1=this.huftree[j].data;

x1=j;

}

else if(this.huftree[j].data

{ min2=huftree[j].data;

x2=j;

}

this.huftree[x1].parent=i;

this.huftree[x2].parent=i;

this.huftree[i]=new TriElement(min1+min2,-1,x1,x2);

}

}

public String getCode(int i)

{

int n=8;

char hufcode[]=new char[n];

int child=i,parent=this.huftree[child].parent;

for (i=n-1;parent!=-1;i--){

hufcode[i]=(huftree[parent].left==child)?'0':'1';

child =parent;

parent =huftree[child].parent;

}

return new String(hufcode,i+1,n-1-i);

}

public String toString()

{

String str="Huffman树的结点数组:";

for(int i=0;i

str+=this.huftree[i].toString()+",";

str+="\nHuffman 编码:";

for(int i=0;i

str+=this.charset.charAt(i)+":"+getCode(i)+",";

return str;

}

public String encode(String text)

{

String compressed="";

for(int i=0;i

compressed+=getCode(text.charAt(i)-'A');

return compressed;

}

public String decode(String compressed){

String text ="";

int node =this.huftree.length-1;

for(int i=0;i

if(compressed.charAt(i)=='0')

node=huftree[node].left;

else node=huftree[node].right;

if(huftree[node].isLeaf()){

text+=this.charset.charAt(node);

node=this.huftree.length-1;

}

}

return text;

}

public static void main(String[] args) {

String text="AAAAABBBCDDBBAAA";

int[]weight={7,5,1,2};

HuffmanTree huffman=new HuffmanTree(weight);

System.out.println(huffman.toString());

String compressed=huffman.encode(text);

System.out.println(compressed);

System.out.println(huffman.decode(compressed));

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值