0

ツリーノードのArrayList(ブランチという名前)を保持するTreeNodeクラスを作成しました。ユーザーが入力したパスによって、ツリーに新しいブランチを追加したいと思います。パスの例は/Monkey/ King / Barで、最後のブランチを除いて、それぞれが既存のブランチであることが理想的です(BarはKingに追加したいブランチです)。Tempは、ツリーに新しいブランチを追加するために使用するグローバル変数です。再帰を使用して、各ブランチが前のブランチの子であることを検証するパスを下に移動しようとしていますが、動作させるのに問題があります。これは私がこれまでに持っていたものであり、一時TreeNodeを再宣言するときに親を設定しないことと関係があるのではないかと考えていました。助けていただければ幸いです。私が言ったことが曖昧すぎる場合は、説明を求めてください。

TreeNode tree = root;
boolean valid = false;
String y = x; //User entered path
for (int i = 0; i < x.length(); i++)
{
  if (x.charAt(i) == '/')
  {
      for (int j = 0; j < tree.branch.size(); j++){
        if (tree.branch.get(j).toString().equals(y)){
            System.out.println(temp.value);
            tree = tree.branch.get(j);
            temp = tree;
            valid = true;
        }
        else
          valid = false;
      }
      y = "";
}
4

1 に答える 1

1

パスが存在する場合など、ツリーをトラバースして最後にノード(またはブランチ)を追加しようとしているようです。

問題は、ノードではなく、主に文字列の処理方法にあると思います。パスの一部を実際に取得しているのではなく、文字列全体を実行しているのに、何も実行していません。

まず、この方法で文字列を操作するためのより良い方法は、String.splitを使用することです。

String[] pathparts = String.split("/");

次に、それがストリンの一部であるかどうかを知る必要があります

for(int i=0;i<pathparts.length-1;i++){ // we don't want the last string
     // your code with .get(pathparts[i]) 
}

あなたがしていることの私の評価が正しければ、あなたはコードの残りの部分を正しく処理しているように見えます。

于 2012-04-30T22:02:15.807 に答える