Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java有最奇怪的错误_Java_Arraylist_Binary Tree - Fatal编程技术网

Java有最奇怪的错误

Java有最奇怪的错误,java,arraylist,binary-tree,Java,Arraylist,Binary Tree,当我运行以下代码时: class zTree<T> { ArrayList<ArrayList<T>> table = new ArrayList<ArrayList<T>>(); int height = 0; <T> void zTree(BinaryTree<T> tree) { recIt((BinaryTree<T>)tree, 1);

当我运行以下代码时:

class zTree<T>
{
    ArrayList<ArrayList<T>> table = new ArrayList<ArrayList<T>>();
    int height = 0;

    <T> void zTree(BinaryTree<T> tree)
    {
        recIt((BinaryTree<T>)tree, 1);
    }

    void recIt(BinaryTree<T> tree, int fromRoot)
    {
        if(!(tree.isEmpty()))
        {
            ArrayList<T> tempList = (ArrayList<T>)table.get(fromRoot);
            tempList.add((T)tree.getData()); // add data to table
            recIt(tree.left,fromRoot+1); // recursive left,
            recIt(tree.right,fromRoot+1); // right
        }
        else
        {
            height = fromRoot-1;
        }
    }
}
类zTree
{
ArrayList table=新的ArrayList();
整数高度=0;
void zTree(二进制树)
{
背诵((二进制树)树,1);
}
void背诵(二进制树,int fromRoot)
{
if(!(tree.isEmpty())
{
ArrayList tempList=(ArrayList)table.get(fromRoot);
templast.add((T)tree.getData());//将数据添加到表中
背诵(tree.left,fromRoot+1);//递归左,
背诵(tree.right,fromRoot+1);//right
}
其他的
{
高度=fromRoot-1;
}
}
}
Javac返回这个错误

zTree.java:15: recIt(structures.tree.BinaryTree<T>,int) in zTree<T> cannot be applied to (structures.tree.BinaryTree<T>,int)
        recIt((BinaryTree<T>)tree, 1);
        ^
1 error
zTree.java:15:zTree中的背诵(structures.tree.BinaryTree,int)不能应用于(structures.tree.BinaryTree,int)
背诵((二进制树)树,1);
^
1错误

我不在乎代码的效率。我很想了解出了什么问题,但javac显然一次帮不了什么忙,因为它告诉我,(x,y)不能应用于(x,y)。。。但是为什么呢?

问题在于
zTree
方法中的
T
zTree
类中的
T
不同,因为该方法是泛型的:

<T> void zTree(BinaryTree<T> tree)
我强烈建议use开始遵循Java命名约定,并且绝对不要创建任何与声明它们的类同名的方法

如果该方法是一个构造函数,那么应该去掉返回类型:

zTree(BinaryTree<T> tree)
zTree(二进制树)

(并且仍然修复类名。)

当您说

<T> void zTree(BinaryTree<T> tree)

此外,按照惯例,Java类名以大写字母开头,例如
ZTree

Java已经疯了。不,也许你的代码错了,不要怪Java:)非常感谢!人们会认为java可以检查这一点,并给出更好的错误。不过我下次会注意到这一点。@gabeio:如果你只有
zTree(BinaryTree)
。。。如果你真的这么说,我建议你用这个问题问一个新问题。(去掉新问题的
背诵
——但最好修改类名。)实际上,我意识到大写字母与类名的不同是偶然的。
<T> void zTree(BinaryTree<T> tree)
zTree(BinaryTree<T> tree)