所以我在這個星期一的Java最終決定了,在課上我們討論了泛型,我認爲它很容易。我想用這本書中的一個例子來嘗試一下。所以我試圖製作一個通用樹。事情是,我的代碼看起來幾乎完全相同,除了我的課程中使用的例子不會工作。至於爲什麼,我很困惑。它告訴我,我在插入方法中缺少標識符。但就像我說的那樣,它看起來像教授做的和書中的例子之間的完美結合。我試圖尋找其他民族關於泛型的問題,但我更加困惑。簡單地說(有理由)有人可以向我解釋我做錯了什麼?如果你想知道什麼教科書它的Java如何通過的Deitel和Deitel公司編程Java通用樹可比較
// Tree.java
// Definition of class TreeNode and class Tree.
// class TreeNode definition
class TreeNode<E extends Comparable<TreeNode<E>>>
{
TreeNode<E> leftNode; // left node
E data; // node value
TreeNode<E> rightNode; // right node
// constructor initializes data and makes this a leaf node
public TreeNode(E nodeData)
{
data = nodeData;
leftNode = rightNode = null; // node has no children
} // end TreeNode constructor
// locate insertion point and insert new node; ignore duplicate values
public void <E extends Comparable<TreeNode<E>>> insert(E insertValue)
{
// insert in left subtree
if (data.compareTo(insertValue) > 0)
{
// insert new TreeNode
if (leftNode == null)
leftNode = new TreeNode<E>(insertValue);
else // continue traversing left subtree
leftNode.insert(insertValue);
} // end if
else if (data.compareTo(insertValue) < 0) // insert in right subtree
{
// insert new TreeNode
if (rightNode == null)
rightNode = new TreeNode<E>(insertValue);
else // continue traversing right subtree
rightNode.insert(insertValue);
} // end else if
} // end method insert
} // end class TreeNode
// class Tree definition
public class Tree<E>
{
private TreeNode<E> root;
// constructor initializes an empty Tree of integers
public Tree()
{
root = null;
} // end Tree no-argument constructor
// insert a new node in the binary search tree
public void insertNode(E insertValue)
{
if (root == null)
root = new TreeNode<E>(insertValue); // create the root node here
else
root.insert(insertValue); // call the insert method
} // end method insertNode
// begin preorder traversal
public void preorderTraversal()
{
preorderHelper(root);
} // end method preorderTraversal
// recursive method to perform preorder traversal
private void preorderHelper(TreeNode<E> node)
{
if (node == null)
return;
System.out.printf("%d ", node.data); // output node data
preorderHelper(node.leftNode); // traverse left subtree
preorderHelper(node.rightNode); // traverse right subtree
} // end method preorderHelper
// begin inorder traversal
public void inorderTraversal()
{
inorderHelper(root);
} // end method inorderTraversal
// recursive method to perform inorder traversal
private void inorderHelper(TreeNode<E> node)
{
if (node == null)
return;
inorderHelper(node.leftNode); // traverse left subtree
System.out.printf("%d ", node.data); // output node data
inorderHelper(node.rightNode); // traverse right subtree
} // end method inorderHelper
// begin postorder traversal
public void postorderTraversal()
{
postorderHelper(root);
} // end method postorderTraversal
// recursive method to perform postorder traversal
private void postorderHelper(TreeNode<E> node)
{
if (node == null)
return;
postorderHelper(node.leftNode); // traverse left subtree
postorderHelper(node.rightNode); // traverse right subtree
System.out.printf("%d ", node.data); // output node data
} // end method postorderHelper
} // end class Tree
這是我的駕駛類,這是一個片段作爲例子書:
// This program tests class Tree.
import java.util.Random;
public class TreeTest
{
public static void main(String args[])
{
Tree tree = new Tree<E>();
E value;
Random randomNumber = new Random();
System.out.println("Inserting the following values: ");
// insert 10 random integers from 0-99 in tree
for (int i = 1; i <= 10; i++)
{
value = randomNumber.nextInt(100);
System.out.print(value + " ");
tree.insertNode(value);
} // end for
System.out.println ("\n\nPreorder traversal");
tree.preorderTraversal(); // perform preorder traversal of tree
System.out.println ("\n\nInorder traversal");
tree.inorderTraversal(); // perform inorder traversal of tree
System.out.println ("\n\nPostorder traversal");
tree.postorderTraversal(); // perform postorder traversal of tree
System.out.println();
} // end main
} // end class TreeTest
你儘量不要使用' E()在main()中?像使用'Integer'代替? – Shark
當你實例化'Tree'時,你需要告訴它'E'是什麼類型。 – jr593
糟糕!原始類型:'樹形樹=新樹();'。嘗試'樹樹=新樹();' –
Bohemian