Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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 为什么我的ArrayList不能正确初始化?_Java_Arraylist - Fatal编程技术网

Java 为什么我的ArrayList不能正确初始化?

Java 为什么我的ArrayList不能正确初始化?,java,arraylist,Java,Arraylist,我在初始化ArrayList时遇到了令人沮丧的问题。我在binaryTreeList.set1,root行中得到一个错误;说 二进制树头: import java.util.ArrayList; import javax.swing.tree.TreeNode; public class BinaryTreeADT { private ArrayList<MyTreeNode> binaryTreeList; private MyTreeNode nullNode

我在初始化ArrayList时遇到了令人沮丧的问题。我在binaryTreeList.set1,root行中得到一个错误;说

二进制树头:

import java.util.ArrayList;
import javax.swing.tree.TreeNode;

public class BinaryTreeADT {

    private ArrayList<MyTreeNode> binaryTreeList;
    private MyTreeNode nullNode = new MyTreeNode(true);   //This creates a null node that initially populates the array.

    //Constructor with no root
    public BinaryTreeADT(){
        binaryTreeList = new ArrayList<MyTreeNode>(10);
    }
    public BinaryTreeADT(MyTreeNode root){
        binaryTreeList = new ArrayList<MyTreeNode>(10);
        initializeList();
        binaryTreeList.set(1, root);
    }
    private void initializeList(){
        for (int i = 0; i < binaryTreeList.size(); i++){
            binaryTreeList.add(nullNode);
        }
    }
    public void add(){

    }
    public void printTree(){
        for (int i = 0; i < binaryTreeList.size(); i++){
            if (binaryTreeList.get(i) != null)
                System.out.println(binaryTreeList.get(i).getNodeChar() + " | ");
        }
    }
}
原因是这一行:

binaryTreeList.set(1, root);
因为二进制树列表的大小为零。您已经构造了ArrayList,并告诉它使用构造函数将初始容量设置为10,但是由于ArrayList中现在没有任何内容,所以返回为0。这就是为什么在initializeList方法中,for循环在第一次迭代时退出,而不是用10个元素初始化binaryTreeList。所以二进制树列表的大小仍然是0。这就是在索引1处设置一个根本不存在的值会引发IndexOutOfBoundException的原因

您应该将initializeList定义为:


当ArrayList为空时,尝试将元素设置在位置1:

binaryTreeList.set(1, root);
相反,只需使用:

binaryTreeList.add(root);

你的推荐人是不允许的。您应该为根节点设置第0个索引。但是,由于ArrayList为空,因此需要实际添加新元素,这将增加数组的大小

binaryTreeList.add(root);
对于数组,索引从0开始,因此数组索引0处的元素是第一个元素,索引1处的元素是第二个元素,以此类推。如果数组大小为n,则最后一个元素将位于索引n-1处

稍后,如果要更改某个索引处的元素,可以将第0个元素设置为root:


如果本例中的第一个参数0小于或等于binaryTreeList.size-1,则这将起作用。

虽然遍历空列表是无用的,但此循环不会遍历所有参数。所以它不能抛出IndexOutOfBoundsException,问题是再往下一点,其中binaryTreeList.set1,root;尝试在Reimeus已经指出的大小为0时向索引1添加元素out@GameDroids:我的错..完全错过了那一点..谢谢你指出那一点..嗯??您是否错过了初始化方法?我正在用一个节点初始化每个插槽,但阵列仍然认为自己是empty@Imray:在initializeList方法内的for循环中,ArrayList未填充节点元素。。因为i private void initializeList(){ for (int i = 0; i < 10; i++){ binaryTreeList.add(nullNode); } }
binaryTreeList.set(1, root);
binaryTreeList.add(root);
binaryTreeList.add(root);
binaryTreeList.set(0, root);