対応する文字列ファイルからバイナリ ツリーを読み込もうとしています。コードのかなり早い段階で 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] には、質問の冒頭に記載されている内容を含むテキスト ファイルの名前が含まれます。
誰かが私を正しい方向に向けることができれば、それは役に立ちます。
他に情報が必要な場合は、お知らせください。