Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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_Parameter Passing_Doubly Linked List - Fatal编程技术网

Java:将双链表的arraylist作为参数传递

Java:将双链表的arraylist作为参数传递,java,arraylist,parameter-passing,doubly-linked-list,Java,Arraylist,Parameter Passing,Doubly Linked List,大师,我很难将双链表的arraylist作为参数传递 我需要在涉及链表的数据结构中表示方阵。我决定使用双链表的arraylist。从文本文件读取的矩阵信息存储在: ArrayList<DoubleLinkedList<Integer>> dLLArrayList **dimension只是一个int变量,用于存储矩阵的大小,例如,输入文本文件中指示的1乘以1的矩阵的大小为1 但是,当我试图打印matrix类中的矩阵内容时,它返回“[[]]”: 下面是matrix类中的s

大师,我很难将双链表的arraylist作为参数传递

我需要在涉及链表的数据结构中表示方阵。我决定使用双链表的arraylist。从文本文件读取的矩阵信息存储在:

ArrayList<DoubleLinkedList<Integer>> dLLArrayList
**dimension只是一个int变量,用于存储矩阵的大小,例如,输入文本文件中指示的1乘以1的矩阵的大小为1

但是,当我试图打印matrix类中的矩阵内容时,它返回
“[[]]”:

下面是matrix类中的set方法,该方法假定设置矩阵对象的ArrayList元素:

public void setMatrixArrayList(ArrayList<DoubleLinkedList<Integer>> matrixArrayList) {
    for(int i = 0; i < matrixArrayList.size(); i ++){
        for (int j = 0; j < matrixArrayList.get(i).size(); j ++) {
            this.rowItemList.add(matrixArrayList.get(i).get(j));
        }
        this.matrixArrayList.add(this.rowItemList);
        this.rowItemList.clear();
    }
}
public void setMatrixArrayList(ArrayList matrixArrayList){
对于(int i=0;i

有什么原因不能用吗?建议、评论?

您在任何地方都不会使用
i

我怀疑你想要:

for (int j = 0; j < matrixArrayList.get(i).size(); j ++) {
        this.rowItemList.add(matrixArrayList.get(i).get(j));
    }
for(int j=0;j
ArrayList或LinkedList只是其他链接列表的数组

所以我假设

public ArrayList<ArrayList> methodTest(ArrayList<ArrayList> doubleList) {} 
publicArrayList方法测试(ArrayList双重列表){

将起作用

问题是您需要清除rowItemList。将rowItemList添加到arraylist时,只需将引用放在那里。因此,当您稍后清除它时,刚刚添加到arraylist中的linkedlist也会被清除。将rowItemList添加到外部列表时,需要克隆它

public void setMatrixArrayList(ArrayList<DoubleLinkedList<Integer>> matrixArrayList) {
for(int i = 0; i < matrixArrayList.size(); i ++){
    for (int j = 0; j < matrixArrayList.get(0).size(); j ++) {
        this.rowItemList.add(matrixArrayList.get(0).get(j));
    }
    this.matrixArrayList.add(this.rowItemList.clone());
    this.rowItemList.clear();
}
}
public void setMatrixArrayList(ArrayList matrixArrayList){
对于(int i=0;i
请正确设置您的代码格式…谢谢您的提醒,我刚刚更正了代码格式。这是我关于stackoverflow的第一篇文章。它可能是我程序的另一部分不太正常。我会及时更新。谢谢你的评论。你说得对,我更新了代码。然而,没有骰子。我会相应地更新帖子。你是对的Dmor574。在我看来,困难在于不能在set方法中使用:“this.matrixArrayList=matrixArrayList;”。由于缺乏知识,我认为集合对象的行为与简单对象不同。传入它们的问题在于它是按引用传递的。这就是为什么我几乎总是创建包含数组列表的类变量。如果我是你,我会创建一个单独的类来管理double ArrayList谢谢你的评论Masood_mj。你说得很对。但是,clone()似乎不是一个可以直接使用的方法。我将尝试向我的DoubleLinkedList类添加一个重写方法,看看这是否会奏效。没错,我忘了您自己已经实现了DoubleLinkedList类。您可能需要查看LinkedList克隆实现以获取一些信息idea@HangYu:您使用
rowItemList
的方式没有意义。为什么在其中一个函数的每个循环结束时都会清除一个列表实例变量?也许您希望在循环中定义一个局部变量。谢谢您的评论@newacct。我想“重用”变量
rowditemlist
来存储一行矩阵整数。让我尝试重新迭代您的建议:在内部for循环中定义一个本地
行列表
,删除outter循环中的
.clone()
方法,并删除
this.rowItemList.clear()
。我的问题是:当我从0增加到1时(我已经更新了原始帖子),本地
行列表将存储什么?矩阵第2行的整数列表,或第2行的整数列表加上第1行的整数列表。@HangYu:您还需要在每个循环开始时将
行列表
初始化为新的空列表。由于变量的作用域在循环内,因此在循环的每次迭代中,它就像一个新的、单独的局部变量,在使用之前必须初始化它。实际上,您可以将此应用于之前所做的工作——在每个循环的开头将
rowditemlist
设置为一个新的空列表也可以解决您的问题;但最好只在所需的最小范围内声明变量。
public ArrayList<ArrayList> methodTest(ArrayList<ArrayList> doubleList) {} 
public void setMatrixArrayList(ArrayList<DoubleLinkedList<Integer>> matrixArrayList) {
for(int i = 0; i < matrixArrayList.size(); i ++){
    for (int j = 0; j < matrixArrayList.get(0).size(); j ++) {
        this.rowItemList.add(matrixArrayList.get(0).get(j));
    }
    this.matrixArrayList.add(this.rowItemList.clone());
    this.rowItemList.clear();
}
}