3

対応する文字列ファイルからバイナリ ツリーを読み込もうとしています。コードのかなり早い段階で NoSuchElementException エラーが発生し (正確な行がコメントされています)、最初からアルゴリズムが機能するかどうかわかりません。テキストファイルは次のように並べられています。

hello 0 0
my 0 0
name 1 1

ここで、最初の数字はノードに左の子があるかどうかを示し、2 番目の数字はノードに右の子があるかどうかを示します。

私の BinaryTree クラスには、ConsTree と EmptyTree という 2 つのサブクラスがあり、各ツリーには独自の左と右のサブツリーがあります。

メソッドのコードは次のとおりです。

BinaryTree<String> loadFile(String filename)
{
        File file = new File(filename);
        Scanner scanny = new Scanner(file);

        Stack<BinaryTree<String>> stack = new Stack<BinaryTree<String>>();

        while(scanny.hasNextLine())
        {
            String data = scanny.next();
            int leftChild = scanny.nextInt();
            int rightChild = scanny.nextInt();
            ConsTree<String> tree = new ConsTree<String>(data, null, null);

            if(rightChild == 1) //this line throws a NoSuchElementException
            {
                tree.right = stack.pop();
            }

            if(leftChild == 1)
            {
                tree.left = stack.pop();
            }

            stack.push(tree);
        }

        return stack.pop();
}

これが私の ConsTree クラスのコンストラクターです。これは、メソッドを作成したときに私が持っていた唯一の他のコードです。

public ConsTree(T data, BinaryTree<T> left, BinaryTree<T> right)
{
    this.data = data;
    this.left = left;
    this.right = right;
}

public ConsTree(T data)
{
    this.left = new EmptyTree();
    this.right = new EmptyTree();
    this.data = data;
}

EmptyTree クラスのコンストラクタは完全に空白です。

メソッドをテストするために使用しているものは次のとおりです。

 public static void main(String[] args) 
 {
      Loader l = new Loader(); //the class with the load method in it
      BinaryTree<String> t = l.loadFile(args[0]);
      System.out.println(t);
 }

args[0] には、質問の冒頭に記載されている内容を含むテキスト ファイルの名前が含まれます。

誰かが私を正しい方向に向けることができれば、それは役に立ちます。

他に情報が必要な場合は、お知らせください。

4

1 に答える 1

0

データ要素の読み取りに関してコーディングすると、if条件は問題ないようです。この行ではエラーは発生していません if(rightChild == 1)tree.right = stack.pop();注意深く見てください。これは、この行またはスタック操作を含む他の行からのものである必要があります。

tree.rightこのような要素がないので、私はそれが由来するのではないかと思います。コードの残りの部分を共有できる場合は、正確な問題を見つけるのに役立ちます。

于 2012-10-13T04:57:04.637 に答える