2016-05-18 11 views
-4

を追加私は、次の形式を有するtxtファイル(グラフのノードとコストを表す)を持っている:JavaのArrayListの機能

B 2
A C 3
D 4
BのC 2。 。 。

上記のデータを表すためにNodeというクラスがあります。

class Node{ 

    Node leftchild; 
    Node rightchild; 
    int cost; 

    public Node(Node firstchild, Node secondchild, int cost){ 
     this.leftchild = firstchild; 
     this.rightchild = secondchild; 
     this.cost = cost; 
    } 

    public Node(Node firstchild, Node secondchild) { 
     this.leftchild = firstchild; 
     this.rightchild = secondchild; 
    } 

    public ArrayList<Node> getChildren(){ 
     ArrayList<Node> childNodes = new ArrayList<Node>(); 
     if(this.leftchild != null) 
     { 
      childNodes.add(leftchild); 
     } 
     if(this.rightchild != null) 
     { 
      childNodes.add(rightchild); 
     } 
     return childNodes; 
    } 

    public boolean removeChild(Node n){ 
     return false; 
    } 
} 

私は今ファイルから(上述形式上)データを読み取り、次のように3次元配列に格納したい私のNodeクラスで以下

[A] [B]だから、私は、ファイルからデータを読み取るには、以下の方法を持って配列、(b)にそれを格納している

の[2]
[A] [C] [3]
..私は、arraylistにトークンを追加中にエラーが発生しています。私はこの問題を解決する方法がわからないですIncompatible types: String cannot be converted to Node.

:として

私のエラーは言っています。どんな種類の助けでも大歓迎です。ありがとう。

public Node[][][] getNodes(File file) throws IOException { 
    FileReader inputHeuristic = new FileReader(file); 
    BufferedReader bufferReader = new BufferedReader(inputHeuristic); 
    String line; 
    List list = new ArrayList(); 
    while ((line = bufferReader.readLine()) != null) { 
     String[] tokens = line.split(" "); 
     list.add(new Node(tokens[0], tokens[1], tokens[2])); 
    } 
    bufferReader.close(); 
    return list.toArray(new Node[list.size()]); // converting list to array 
} 
+1

対応するコンストラクタが2つの 'Node'値と1つの' int'値を期待しているときに 'なぜ新しいノード(トークン[0]、トークン[1]、トークン[2]公開ノード(ノードfirstchild、ノードsecondchild、intコスト) '? –

+0

私はそれらの型を追加する方法がわかりませんでした、私はそれを見つけたとそれを発見しました – Dee

+0

'Node'クラスの型を配列リストに追加する方法がわかりませんでした。私はトークンが整数でしか動作しないことを知っていますが、どのようにクラス型を追加しますか?私はわかりません。私はこれに少し慣れています。 – Dee

答えて

0

あなたがしようとしていることはあまり意味がありません。文字列型のものをクラスオブジェクトに変更することはできません。コンストラクタに渡される内容を変更するか、インスタンス変数の型をStringに変更する必要があります。

個人的には、ノードタイプ変数を文字列タイプに変更します。また、トークン[2]をint型に解析する必要があります。すなわちInteger.parseInt(token [2]);