2016-12-01 8 views
0

私はJavaの初心者で、再帰を使用して簡単なBSTを作成する必要がある宿題があります。シンプルでなければならないが、それは私にいくつかの問題を与えている。BSTに挿入すると、 "メソッドinsert(myclass.TreeNode、int)はmyclass型のために定義されていません"

public static class TreeNode 
{ 
    TreeNode LeftLink; 
    int  Content; 
    TreeNode RightLink; 

} 
// end class TreeNode 

public static void main(String[] args) throws IOException 
{ 
    TreeNode T = null; 
    int  H, i; 

    T = BuildSearchTree(); 

    H = Height(T); 
    System.out.println("The number of nodes on the tree is " + NodeCount(T)); 
    System.out.println("The height of the tree is " + H); 
    for (i = 0; i <= H; i++) 
     System.out.println("The number of nodes on level " + i + " is " + CountLevel(T,i)); 
    // end for 
} 

私のタスクは、すでに私に与えられ、何も変更せずにBinarySearchTreeメソッドを作成するために満たすことであるが、以下のように

コンストラクタクラスとmain()メソッドは、私に提供されています。

BinarySearch Treeメソッドは、ユーザーからの整数で埋められたファイルを要求し、BSTを再帰的に構築します。

私のコンパイラ(Eclipseのは)私に私insertメソッドのタイトルの下にエラーを与えている「方法を挿入(myclass.TreeNode、intは)MyClass型のために定義されていません」

私は、これは何かを持っていると信じてT = BuildSearchTree();という方法でメインの方法で宣言されていますが、率直に言って、何が起こっているのか分かりません。私が持っているもの

がこれまでに挿入するコードを開始する前に()

public static TreeNode BuildSearchTree() throws IOException { 

    Scanner Keyboard = new Scanner(System.in); 

    System.out.println("enter the name of your word file (please include ''.data'' or ''.txt'' when inputting file name) (number of words in the word file must be less than 30.)"); 

    String datafile = Keyboard.next(); 

    Scanner InputFile = new Scanner(new File(datafile)); 

    int[] data = new int[1000]; 

    while(InputFile.hasNext()){ 
     int i; 
     data[i]=InputFile.nextInt(); 
       i++; 
     } //end while 

    for(int i=0; i<1000; i++){ 
    TreeNode T = insert(T, data);} //end for 




    private static TreeNode insert(TreeNode node, int content) 
    { 


     if (node == null) 
     { 
      node.Content=content; 
     } 

     else if (content <= node.Content) 
      { 
       insert(node.LeftLink, content); 
      } 

     else 
      { 
       insert(node.RightLink, content); 
      }          
     } 
    return node; 
}//end insert method 

return T; 

}//end BuildSearchTree 
+0

がなぜ 'です:あなたが何かのようにする必要があります1000

あなたのwhileループのリテラル値ではなく挿入するために、実際の呼び出しの周りにループ内のファイルから読み込む項目の数を使用する必要がありますinsert'は 'BuildSearchTree'の中で宣言されていますか?私の教授によると – 4castle

+0

、私はBuildSearchTree内のコードを編集することしかできません。私は私のインサートメソッドを外に置くことができれば、私はこのすべてを自分で簡単に動かすことができます。 –

+0

BuildSearchTreeメソッドの最後に中括弧がありません。自動インデントを駄目にするので、コードの行の終わりに中かっこを置くことをお勧めしません。そのブレースを独自の行に置き、自動インデントした場合、これは見やすくなります。 – templatetypedef

答えて

0

はJavaがネストされた関数を許可し、そのコードBuildSearchTreeを終了していないです()。 T = insert(T, data);に挿入する

コールはあなたがループの後にそれを使用したい場合はループの外Tを宣言する必要がT = insert(T, data[i]);

のようなものでなければなりません。

データファイルの要素数が1000未満であると想定できないため、配列ではなくjava.util.ArrayListを使用することをお勧めします。

ArrayList<Integer> data = new ArrayList<Integer>; 
    while(InputFile.hasNext()){ 
     data.add(InputFile.nextInt()); 
    } //end while 
    TreeNode T = new TreeNode(); 
    for(i=0; i<data.length(); i++){ 
     T = insert(T, data[i]); 
    } //end for 
    return T; 
関連する問題