永发信息网

JAVA程序错在哪?

答案:6  悬赏:60  手机版
解决时间 2021-11-11 17:14
JAVA程序错在哪?
最佳答案
HuffmanTree[] HT = new HuffmanTree[8];
for (m = 0; m < a.length; m++) {
HT[m] = new HuffmanTree();
HT[m].w = a[m];
HT[m].p = 0;
HT[m].l = 0;
HT[m].r = 0;
}

每次使用前需要实例化一个HuffmanTree类 数组下标从0开始 所以不要 m+1
数组从0-7 共8个

上面循环从0--3 循环了4次,数组m+1,下标到4

再走下一个循环的时候
for(m=4;m<8;m++){
HT[m+1].w=0;HT[m+1].p=0;HT[m+1].l=0;HT[m+1].r=0;
}

同样循环了4次, 数组m+1,从4+1=5 开始,到第四次 下标就成9了,大于定义的数组,会有下标越界异常
全部回答
设了个断点,发现是送这开始错的
HuffmanTree []HT=new HuffmanTree [8];
for(m=0;mHT[m+1].w=a[m];HT[m+1].p=0;HT[m+1].l=0;HT[m+1].r=0;
}
for(m=4;m<8;m++){
HT[m+1].w=0;HT[m+1].p=0;HT[m+1].l=0;HT[m+1].r=0;
}
for(m=1;m<=4;m++)
System.out.println(HT[m].w+"\t"+HT[m].p+"\t"+HT[m].l+"\t"+HT[m].r);
for(m=5;m<8;m++){
s1=select1(HT,m-1,s1,s2);
s2=select2(HT,m-1,s1,s2);
HT[s1].p=m; HT[s2].p=m; HT[m].l=s1;
HT[m].r=s2;HT[m].w=HT[s1].w+HT[s2].w;
}

错误信息:org.eclipse.debug.core.DebugException: 检索数组的组件类型时发生 com.sun.jdi.ClassNotLoadedException: 尚未装入类型。
后面没仔细看,你可以说下你想实现的效果。
HuffmanTree []HT=new HuffmanTree [8];
for(m=0;mHT[m+1].w=a[m];HT[m+1].p=0;HT[m+1].l=0;HT[m+1].r=0;
}

在我截下的代码中,你申明了一个对象数组,但是这个对象数组中的每一个成员都是null,没有初始化。因此在接下来的for循环中你对数组中的成员对象直接引用它的成员变量,肯定就出错了,是空指针异常。

因为HuffmanTree是input的一个内部类,因此在new HuffmanTree()之前必须要先new一个input类。
具体语法是:
input obj = new input();
HuffmanTree temp = obj.new HuffmanTree();
否则会出现编译错误。
不会呀 看看 。。。
int a[]={7,5,2,4};
HuffmanTree []HT=new HuffmanTree [8];
for(m=0;m{
HT[m+1].w=a[m];
HT[m+1].p=0;
HT[m+1].l=0;
HT[m+1].r=0;
}
----分析----
HuffmanTree[] HT=new HuffmanTree [8];
只是定义了一个HuffmanTree类型数组引用,,其内部子元素都没有具体实例化,即都指向null,在后面的HT[m+1].w=a[m]等赋值操作中,也就是操作具体某个数组元素时,会出现空值异常

------------------------
public class Input
{

public static int select1(HuffmanTree[] HT,int s,int s1,int s2)
{
int i,min=1000;
for(i=1;i<=s;i++)
{
if(HT[i].w min=HT[i].w;
}
s1 = min;
//s1 返回,结合代码,后面要给数组做下标,考虑过s1 = 1000 时的情况吗?
return s1;
}

public static int select2(HuffmanTree[] HT,int s,int s1,int s2)
{
int i,min=1000;

for(i=1;i<=s;i++)
{
if(HT[i].w min = HT[i].w;
}
s2 = min;
//s2 返回,结合代码,后面要给数组做下标,考虑过s2 = 1000 时的情况吗?

return s2;
}

public static void main(String[] args)
{
int i=45,m,s1=0,s2=0;
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
try{
System.out.print("Enter number:");
String s=in.readLine();
System.out.println("r="+s);
}
catch(Exception e)
{
System.out.print("出错");
}

int a[]={7,5,2,4};

HuffmanTree[] HT = new HuffmanTree[8];
//增加个for循环,实例化HuffmanTree[]数组
for(m=0; m {
HT[m] = new HuffmanTree();
}

for(m=0; m {
HT[m+1].w= a[m];
HT[m+1].p=0;
HT[m+1].l=0;
HT[m+1].r=0;
}

//m=4时,HT[m+1]下标越界,改成了HT[M]
for(m=4;m<8;m++)
{
System.out.println(m);
HT[m].w=0;
HT[m].p=0;
HT[m].l=0;
HT[m].r=0;
}

for(m=1;m<=4;m++)
System.out.println(HT[m].w+"\t"+HT[m].p+"\t"+HT[m].l+"\t"+HT[m].r);

for(m=5;m<8;m++)
{
s1 = select1(HT,m-1,s1,s2);
System.out.println(s1);
s2=select2(HT,m-1,s1,s2);
System.out.println(s2);

HT[s1].p=m; //si=select1(HT,m-1,s1,s2)可能造成下标越界
HT[s2].p=m; //s2=select2(HT,m-1,s1,s2)可能造成下标越界
//这里需要你根据自己的业务逻辑修改select1()、select2()方法

HT[m].l=s1;
HT[m].r=s2;
HT[m].w = HT[s1].w+HT[s2].w;
}
}

}

//写在Input类内,实例化数组出错,放在外面,作为类的引用
class HuffmanTree
{
int w ;
int p ;
int l ;
int r ;
}

最后把你想要达到的目标说明下,好方便修改
这个程序是拿来做什么的,请楼主说清楚了。不然好难看啊
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
威玛猎犬爱叫吗?
相遇中的对视
当我一次次的面临道德抉择的时候那个临是什么
从武汉到广西快递需要多久??
爱能社工作怎么样
伏天吃九菜花好不好
男友把酒弄洒到我的胸部,还舔干净
给你一百万让你去上一个丑女,你会去吗?或者
一海里的路程跟公路的一公里路程谁远一点
当x等于多少时,x的平方和2x相等
制定一套标准流程,该从哪些方面着手?
大衣哥朱之文为什么被警察带走?
求解方程(20t)^2+(100-4t)^2=(20√10)^
带聪和乐字的网名 求解答
火力发电厂给煤机启动后应检查哪些项目
推荐资讯
什么叫草个子,似乎是北方的方言叫法
轮滑双刹的练习方法
joydoy中文怎么读
5年前,18岁的时候一个人去网吧上网,被三个2
六分之7-括号7/10-3分之一括回加上五分之
清龙油漆城地址在哪,我要去那里办事,
请问这部电影叫什么名字,谢谢了
乐高教育机构(天津河西区)地址在什么地方,想
从丰县坐汽车到南京要用多长时间
看见人家有急难而不去救援的成语是 ?
我想找个炒海鲜的师傅
惠普金牌服务分部地址在什么地方,我要处理点
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?