如何给一个类中的ArrayList赋值?

时间:2018-11-01 09:05:42

标签: java arraylist

在弄清楚为什么您似乎无法在没有错误的情况下无法将值分配给ArrayList上,我花了最长的时间。

第一段代码是main方法,该方法从文本文件中逐行获取并使用定界符对行进行拆分。第一个字符串存储在一个很长的变量中,然后其他9个字符串存储在ArrayList中。它将对文件中的每一行执行此操作。

我已多次调试此代码,它表明数组获取了正确的值。

问题在于代码何时到达其调用插入的部分,我已在代码中对此进行了注释。

它首先要创建节点,但是当它到达将要从第一个ArrayList的值添加到新创建的ArrayList的零件时,一切都会中断。 for循环会停止运行,即使达到限制,它也会继续增加。

我决定省略BinaryTree类,该类也用于此项目,因为它可以正常工作。

那么我该如何正确地将传递给节点ArrayList的ArrayList中的值分配?

package assignment7;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import static java.lang.Long.parseLong;
import java.util.Scanner;
import java.util.ArrayList;

public class Assignment7 {

    public static void main(String[] args) throws IOException {

    boolean headerLine = true;
    String firstLine = "";
    String catchLine;
    String token;
    long s_cid;
    ArrayList<String> Arr = new ArrayList<String>();
    Scanner delimS;
    int count = 0;
    BinaryTree snomedTree = new BinaryTree();

    try(BufferedReader br = new BufferedReader(new FileReader("Data.txt"))) {

        while ((catchLine = br.readLine()) != null) {

            for(int i = 0; i < 9; i++){

                Arr.add("");

            }

            if(headerLine){

                firstLine = catchLine;
                headerLine = false;

            }

            else{

                delimS = new Scanner(catchLine);
                delimS.useDelimiter("\\|");
                s_cid = parseLong(delimS.next());

                while(delimS.hasNext()){

                    token = delimS.next();
                    Arr.set(count, token);
                    count++;

                }

//直到此处运行正常,然后将此插入函数称为

                  snomedTree.insert(new Node(s_cid, Arr));

            }

            Arr.clear();

        }
    }

    try (PrintWriter writer = new PrintWriter("NewData.txt")) {

        writer.printf(firstLine);
        snomedTree.inorder(snomedTree.root, writer);

    }
}

}

这是Node类:

package assignment7;

import java.util.ArrayList;



class Node {

public long cid;
public ArrayList<String> Satellite;
public Node l;
public Node r;

public Node(long cid, ArrayList<String> Sat) {
    this.Satellite = new ArrayList<String>();
    this.cid = cid;

//即使i = 9之后,此for循环仍继续运行         for(int i = 0; 0 <9; i ++){

        Satellite.add(Sat.get(i));

    }

}

}

这是Binary Tree类:

package assignment7;
import java.util.ArrayList;
import java.io.PrintWriter;


public class BinaryTree {
public Node root;
public BinaryTree() {
    this.root = null;
}
public void insert(Node x) {
    if (root == null) {
        root = x;
    } 

    else {
        Node current = root;
        while (true) {

            if (x.cid > current.cid) {
                if (current.r == null) {
                    current.r = x;
                    break;
                } 

                current = current.r;
            }

            else {
                if (current.l == null) {
                    current.l = x;
                    break;
                } 
                current = current.l;
            }
        }

    }
}

public void inorder(Node x, PrintWriter out) {

    if (x != null) {

    inorder(x.l, out);
        out.printf(String.valueOf(x.cid) + "|");
        for(int i = 0; i < 9; i++){

            if(i != 8){

                out.printf(x.Satellite.get(i) + "|");

            }

            else{

                out.printf(x.Satellite.get(i) + "\n");

            }
        }
        inorder(x.r, out);
    }


}
}

2 个答案:

答案 0 :(得分:0)

public Node(long cid, ArrayList<String> Sat) {
    this.Satellite = new ArrayList<String>();
    this.cid = cid;
    for(int i = 0; i < Sat.size()-1; i++){

        Satellite.add(Sat.get(i));

    }

}

这里0 <9是错误的, 您遇到什么错误?

答案 1 :(得分:0)

感谢Miller Cy Chan的评论,它现在可以完美运行。

我将Node类更改为:

function AddItem {
  Param(
      $Object,
      $Value,
      [switch]$Uniq
  )
  $Object.Value += $Value
}

$JSON = '[["aaa", "bbb"], ["ccc", "ddd"]]' | ConvertFrom-Json 

Additem -Object ([ref]$JSON) -Value "TEST"

"0  : $($JSON[0])"
"0  : $($JSON[1])"
"0  : $($JSON[2])"

我还确保每次迭代后将主菜单中的“ count”变量都改回0。