嘿,我写了一些二进制搜索树,它有一个插入方法。 所以它得到一个要插入的对象,一个Char数组和一个Integer,它给它指数来看。
所以这是插入方法:
public void insert(Buchstabe pBuchstabe,char[] pChar,int pStelle)
{
if(pBuchstabe==null)
return;
if(baum.isEmpty())
{
baum=new BinaryTree(pBuchstabe);
}
else
if(pStelle <= pChar.length)
{
if(pChar[pStelle] == '.')
{
Mybaum lTree=this.getLeftTree();
lTree.insert(pBuchstabe,pChar,pStelle+1);
this.baum.setLeftTree(lTree.baum);
}
else
if(pChar[pStelle]=='-')
{
Mybaum lTree=this.getRightTree();
lTree.insert(pBuchstabe,pChar,pStelle+1);
this.baum.setLeftTree(lTree.baum);
}
}
}
我有一个传递所需参数的方法(在这种情况下):一个对象Buchstabe,然后是Char数组[&#39;。&#39;,&#39;。&#39;]和整数0到插入方法。
我得到一个超出范围的错误:
java.lang.ArrayIndexOutOfBoundsException: 2
at Mybaum.insert(Mybaum.java:22)
at Mybaum.insert(Mybaum.java:25)
at Mybaum.insert(Mybaum.java:25)
at Mörserbaum.einlesen(Mörserbaum.java:42)
有谁知道我做错了什么?
答案 0 :(得分:0)
看起来你有问题
if(baum.isEmpty())
{
baum=new BinaryTree(pBuchstabe);
}
else
**if(pStelle <= pChar.length)**
{
**if(pChar[pStelle] == '.')**
{
Mybaum lTree=this.getLeftTree();
lTree.insert(pBuchstabe,pChar,pStelle+1);
this.baum.setLeftTree(lTree.baum);
}
if(pChar [pStelle] ==&#39;。&#39;) - 你得到indexOutOfBound bc /你需要说 if(pChar [pStelle-1] ==&#39;。&#39;)..因为Java数组索引从0开始,如果长度为5,则最后一个索引将是pChar [4] ...
此代码可能存在更多问题,因为我们没有完整的代码/上下文我无法推测更多...但这是您可以获得indexoutofbound的原因之一
答案 1 :(得分:0)
public void einlesen()
{
Buchstabeenschlange sch = new Buchstabeenschlange();
for(int i = 0;i<codeTabelle.length;i++)
{
Buchstabe a = new Buchstabe(alphabet[i],codeTabelle[i]);
if(a == null)
{
System.out.println("Buchstabe mit Error == "+a);
}
System.out.println("Buchstabe == "+a);
sch.hinzufuegen(a);
System.out.println("------------");
}
List l = sch.gibListe();
sch.druckeListe();
l.toFirst();
while(l.hasAccess())
{
Buchstabe buch = (Buchstabe) l.getObject();
char[] code = buch.getCode().toCharArray();
baum.insert(buch,code,0);
l.next();
}
TreeViewGUI view = new TreeViewGUI(baum);
}
这将创建对象Buchstabe并在List中对其进行排序,以便您在开头具有最短的字符串。 然后将它们插入到Binaray树中并显示它。